class A
{
public static void main(String[] args)
{
Integer a = new Integer(0);
Double d = new Double(0);
Float f = new Float(0);
Long g = new Long(0);
System.out.println(a.equals(0));
System.out.println(g.equals(0));
System.out.println(d.equals(0));
System.out.println(f.equals(0));
}
}
结果:
true
false
false
false
{
public static void main(String[] args)
{
Integer a = new Integer(0);
Double d = new Double(0);
Float f = new Float(0);
Long g = new Long(0);
System.out.println(a.equals(0));
System.out.println(g.equals(0));
System.out.println(d.equals(0));
System.out.println(f.equals(0));
}
}
结果:
true
false
false
false
autoboxing后0成了Integer对象,你用其他的equal,肯定是false啊
看一下源码,对于Double的equals的实现:
public boolean equals(Object obj) {
return (obj instanceof Double)
&& (doubleToLongBits(((Double)obj).value) ==
doubleToLongBits(value));
}
如果返回TRUE,obj是一个Double型的对象,而0不是。如果你换成0.0那么返回就是TRUE了。同样可以解释Long和Float的情况。
所以只有第一条是true的
这是jdk1.5的新特性
所以最终只有Integer型的比较结果为true
如果把代码稍作修改:class A
{
public static void main(String[] args)
{
Integer a = new Integer(0);
Double d = new Double(0);
Float f = new Float(0);
Long g = new Long(0);
System.out.println(a.equals(0));
System.out.println(g.equals(0L));
System.out.println(d.equals(0.0));
System.out.println(f.equals(0F));
}
} 如果做如上修改,那么打印结果就是:
true
true
true
true
关于你的false,无关的2个类用equars,无论如何都是false。
a.equals(0));
System.out.println(g.equals(0L));
System.out.println(d.equals(0.0));
System.out.println(f.equals(0F));
这样才是正确的。
在网上给你找了点资料在JDK1.5之前,我们总是对集合不能存放基本类型而耿耿于怀,现在自动转换机制
解决了我们的问题。int a = 3;
Collection c = new ArrayList();
c.add(a);//自动转换成Integer.Integer b = new Integer(2);
c.add(b + 2); 这里Integer先自动转换为int进行加法运算,然后int再次转换为Integer.
这样对我我们编程是不是很方便http://hi.baidu.com/suofang/blog/item/73e42273b9e5171d8701b058.html
这个链接解释的很详细
{
public static void main(String[] args)
{
Integer a = new Integer(0);
Double d = new Double(0);
Float f = new Float(0);
Long g = new Long(0);
Integer b=0;
Integer c=0;
Integer e=1000;
Integer h=1000;
System.out.println(b==c);
System.out.println(e==h);
System.out.println(a.equals(0));
System.out.println(g.equals(0L));
System.out.println(d.equals(0.0));
System.out.println(f.equals(0F));
}
}
true
false
true
true
true
true
添加了一点···