请教大家一个问题,现在我想让两个不同类型的变量进行比较,short和int类型用equals方法,据说equals方法比较的是内容那我这句话为什么返回false呢?new Integer(1).equals(new Short((short)1));

解决方案 »

  1.   

    public boolean equals(Object obj)
    比较此对象与指定对象。当且仅当参数不为 null,并且是一个与该对象包含相同 int 值的 Integer 对象时,结果为 true。 并且是一个与该对象包含相同 int 值的 Integer 对象时.
    必须是Integer 
      

  2.   


    该例子中比较的是地址,由于都 'new' 了新的内存空间,故返回false.
      

  3.   

    2楼的不要误导新人。
    Integer早就重写了equals方法,跟地址没关系
      

  4.   

    因为类型不同,所以equals返回false很正常。再说楼主的想法,本身就有问题。从类型上来说 short 和 integer 是不同精度的整数,当然是不同的了,也就是不相等的。相当于数学里 1.0 和 1 表示不同的含义一样。如果真的只是想比较,那应该先都转型成相同的类型再比。
      

  5.   

    拜托说话负点责任吧,新人就是这样被误导的。废话不多,源码说话:    public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
        }
    Integer的源码很清楚地说明问题了,只有obj instanceof Integer首先为true,才可能返回真。
      

  6.   

    拜托说话负点责任吧,新人就是这样被误导的。废话不多,源码说话:    public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
        }
    Integer的源码很清楚地说明问题了,equals的参数首先要是Integer的实例,否则不可能返回true。
      

  7.   

    这种问题,最好的办法就是楼主亲自step into到source code中去,别人说千遍也不如自己做一遍
      

  8.   

    自己去看看API嘛 
    那里定义的OBJ之间的比较都是要先类型要一样了才比较数值的
    (-_0)!学习ING
      

  9.   

    谢了个位,明白问题了,现在感觉学习java麻木了,在实际开发中用不到就不愿意去想他呵。