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

解决方案 »

  1.   

    自从装箱的问题?0都被装成Integer(0)了吧。后面三个连类型都不一样,自然是false了。
      

  2.   

    equal比较的是对象
    autoboxing后0成了Integer对象,你用其他的equal,肯定是false啊
      

  3.   

    就简单解释一下Double的情况为什么是不一样的吧:
    看一下源码,对于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的情况。
      

  4.   

    经过自动装箱后a = 0, d = 0.0, f = 0.0f, g = 0l
    所以只有第一条是true的
    这是jdk1.5的新特性
      

  5.   

    因为0的字面量是int,下面每一个equals方法首先比较的是类型是否相同,然后才是值是否相同
    所以最终只有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
      

  6.   

    0默认是int,Integer在 -128~127之间时,用equars可以在int和Integer之间返回true。
    关于你的false,无关的2个类用equars,无论如何都是false。
      

  7.   

    Java默认情况输入不带小数点的数字为int类型,而int类型封装类为Integer,这样就可以解释那样的结果了.
      

  8.   

    Java默认输入的参数是int型的,是true说明0是整形的
    a.equals(0)); 
      System.out.println(g.equals(0L)); 
      System.out.println(d.equals(0.0)); 
      System.out.println(f.equals(0F)); 
    这样才是正确的。
      

  9.   

    其实就是自动包装 的结果 
    在网上给你找了点资料在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
    这个链接解释的很详细
      

  10.   

    class A1 
    {   
      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
    添加了一点···