黑马程序员技术交流社区

标题: equals 问题 [打印本页]

作者: hel    时间: 2013-11-3 00:08
标题: equals 问题
public static void main(String[] args) {
        Long lo = new Long(1);
        Integer a = new Integer(1);
        int aa = 1;
        System.out.println(lo.equals(a)); //false
        System.out.println(lo==aa); //true
      }

为什么
System.out.println(lo==aa)
会输出true

System.out.println(lo.equals(a))
则输出false
作者: 王东    时间: 2013-11-3 00:26

public static void main(String[] args) {
        Long lo = new Long(1);
        Integer a = new Integer(1);
        int aa = 1;
        System.out.println(lo.equals(a));            //  API中,Long类型的equals方法的定义是Long 对象与此对象包含相同的 long 值时,结果才为 true。
        System.out.println(lo==aa);                   // Long类型和aa相比的时候,有一个自动拆箱的过程,由Long类型转为基本数据类型和aa相比,1 == 1;为true
      }


哥们加油..............
作者: 狼人→浪人    时间: 2013-11-4 00:24
本帖最后由 狼人→浪人 于 2013-11-4 00:36 编辑

equals(Object obj)将此对象与指定对象进行比较。当且仅当该参数不是 null,且 Long 对象与此对象包含相同的 long 值时,结果才为 true。
作者: 殷挥笔    时间: 2013-11-4 01:12
Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true。
而你“lo==aa”时,因为long的容量大于int,所以在进行运算时int会自动转换成long类型,所以结果为true。
作者: spiderman    时间: 2013-11-4 13:26
你的这个问题其实是涉及到equals  和 == 的区别

首先你要知道,equals方法是从object类中继承过来的,在object类中equals方法比较的是两个对象的哈希值(或者地址值),也就是说,在Object类中的时候,equals的功能等于==,但是当Object类被继承复写之后,就拿你这个例子来说,Long这个类中的equals方法被重写了,也就是说,在Long类中,equals用来比较两个值是否相等了,而不是比较两个对象的地址是否相同了。

具体的代码是怎样的我没看源码,反正道理是这样的。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2