标题: 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?
自动解包装与自动包装的功能
从上面有没有看到有点别扭啊,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);
}