为了账号安全,请及时绑定邮箱和手机立即绑定

对象引用和对象本身内容

对象引用和对象本身内容

慕妹3242003 2018-08-20 10:09:39
学习Java的时候遇到一个问题?Integer i1=new Integer(51);Integer i2=new Integer(51);System.out.println(i1==i2);   --》falseSystem.out.println(i1.equals(i2));   -->true我知道i1和i2都是两个Integer对象的引用,他们指向的是对象的堆内存地址,每个对象都是标识唯一的,返回false我可以理解。但是第二个理解不了,我网上查了Object类的equals方法源码,网上答案只是:return this==object(形参);那样的话第二个打印结果不可能是:true  !!! 猜测的结果是equals方法源码不只有那一句,应该还有一句:如果地址不一致,则比较其内容。注意:i1引用的可不是String对象,所以不可能调用String重写的equals方法。请各位楼主帮我解析下,object的equals方法和逻辑运算符“==”比较的不是对象的引用吗?难道基本数据类型有不同的比较,是网上源码错了还是其他地方错了!求源码 !
查看完整描述

1 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

你好,equals函数是java Object类的函数。而Integer类覆写了equals()函数,所以楼上的代码就是Integer的equals源码,而String也有自己的equals()函数:

public boolean equals(Object anObject) {    if (this == anObject) {        return true;
    }    if (anObject instanceof String) {
        String anotherString = (String)anObject;        int n = count;        if (n == anotherString.count) {            char v1[] = value;            char v2[] = anotherString.value;            int i = offset;            int j = anotherString.offset;            while (n-- != 0) {                if (v1[i++] != v2[j++])                    return false;
            }            return true;
        }
    }    return false;
}

而Object类中的equals源码:

public boolean equals(Object obj) {    return (this == obj);
}

可以发现equals实际上和==是一样的,而在Integer类中,覆写了这个方法,

从楼上的Integer的equals源码发现,equals函数把obj的Integer对象变成int类型的数据,value也是int类型的数据

于是就变成int a=51; int b=51;if(a==b)


查看完整回答
反对 回复 2018-08-28
  • 1 回答
  • 0 关注
  • 739 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号