免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2099 | 回复: 2
打印 上一主题 下一主题

JDK1.5中equals的困惑,SCJP认证要注意.(需要高手解答原因)--谢谢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-29 12:06 |只看该作者 |倒序浏览
先来看个例子
public class Test{
   public static void main(String[] args){
     Long lo = new Long(7);
     if (lo.equals(7L)){
        System.out.println(”equal”);
    }else{
     System.out.println(”not equal”);
    }
  }
}
在JDK1.3,JDK1.4中,会出现什么什么情况?大家想想.

上面的class编译出错.因为Long类中equals定义如下,传入的参数必须是Object对象实例.
public boolean equals(Object obj) {
    if (obj instanceof Long) {
        return value == ((Long)obj).longValue();
    }
    return false;
}
但是,在jdk1.5中,我查看了equals方法,都是一样的.但是有趣的现象出现了,我用eclipse竟然可以正常编译运行程序.难以置信.难道是BUG?

不知道有那位高手可以帮我解答?

论坛徽章:
0
2 [报告]
发表于 2007-03-29 17:41 |只看该作者
j2se 5 里面的自动装箱功能

论坛徽章:
0
3 [报告]
发表于 2007-03-29 19:37 |只看该作者
JDK5.0的新特性:

自动解包装与自动包装的功能
  从上面有没有看到有点别扭啊,h.get(new Integer(123))这里的new Integer(123);好烦的,在JDK5.0之前我们只能忍着了,现在这种问题已经解决了,请看下面这个方法。我们传入一个int这一基本型别,然后再将i的值直接添加到List中,其实List是不能储存基本型别的,List中应该存储对象,这里编译器将int包装成Integer,然后添加到List中去。接着我们用List.get(0);来检索数据,并返回对象再将对象解包装成int。恩,JDK5.0给我们带来更多方便与安全。
//Code list 7
public void autoBoxingUnboxing(int i) {
 ArrayList<Integer> L= new ArrayList<Integer>();
 L.add(i);
 int a = L.get(0);
 System.out.println("The value of i is " + a);
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP