Chinaunix

标题: JDK1.5中equals的困惑,SCJP认证要注意.(需要高手解答原因)--谢谢 [打印本页]

作者: cool_gua    时间: 2007-03-29 12:06
标题: JDK1.5中equals的困惑,SCJP认证要注意.(需要高手解答原因)--谢谢
先来看个例子
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?

不知道有那位高手可以帮我解答?
作者: 艾斯尼勒    时间: 2007-03-29 17:41
j2se 5 里面的自动装箱功能
作者: chouy    时间: 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);
}




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2