对象引用和对象本身内容

学习Java的时候遇到一个问题?

Integer i1=new Integer(51);
Integer i2=new Integer(51);

System.out.println(i1==i2);   --》false
System.out.println(i1.equals(i2));   -->true

我知道i1和i2都是两个Integer对象的引用,他们指向的是对象的堆内存地址,每个对象都是标识唯一的,返回false我可以理解。但是第二个理解不了,我网上查了Object类的equals方法源码,网上答案只是:return this==object(形参);那样的话第二个打印结果不可能是:true  !!! 猜测的结果是equals方法源码不只有那一句,应该还有一句:如果地址不一致,则比较其内容。

注意:i1引用的可不是String对象,所以不可能调用String重写的equals方法。

请各位楼主帮我解析下,object的equals方法和逻辑运算符“==”比较的不是对象的引用吗?难道基本数据类型有不同的比较,是网上源码错了还是其他地方错了!求源码 !


慕妹3242003
浏览 740回答 1
1回答

呼如林

你好,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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java