RT 下面代碼的結(jié)果是 false true想問下是為什么,equals()方法到底比較的是內(nèi)存中的什么?public class tryit {public static void main(String[] args) {Value v1=new Value(100);Value v2=new Value(100);System.out.println(v1.equals(v2));Integer i1=new Integer(100);Integer i2=new Integer(100);System.out.println(i1.equals(i2));}}class Value{public Value(int a){i=a;} int i;}
2 回答

叮當(dāng)貓咪
TA貢獻1776條經(jīng)驗 獲得超12個贊
因為你自己定義的Value類調(diào)用的equals是Object類的,此時的equals就相當(dāng)于“==”;
而Integer的equals是重寫了Object的equals,此時比較的是2個Integer對象的值。。。
如果你不重寫equals,它比較的就是內(nèi)存中的地址,也就是引用是否指向的是同一個對象。。。
如果有問題,請追問。。
希望可以幫助你

慕村9548890
TA貢獻1884條經(jīng)驗 獲得超4個贊
舉個例子吧:
String a = "abc"; //不是空對象
boolean b = a.equals("abc"); //不會報錯
String c = null; //空對象
boolean d = c.equals("abc"); //會報錯
報不報錯主要看調(diào)用equals方法的對象是不是null。
所以很多程序員會這么寫程序:if ("".equals(a))...而不寫成if (a.equals(""))...
原因是a有可能是null。
添加回答
舉報
0/150
提交
取消