equals()方法的問題
之前做過比較兩個String類型的值時
比如:
String str1="你好";
String str2="你"+"好";
String str3="你";
String str4="好";
String str5=str3+str4;
System.out.println(str1.equals(str2));
System.out.println(str1.equals(str5));
為什么這兩個句子返回的都是true啊,不是說好的比較地址的嗎?有疑惑啊
之前做過比較兩個String類型的值時
比如:
String str1="你好";
String str2="你"+"好";
String str3="你";
String str4="好";
String str5=str3+str4;
System.out.println(str1.equals(str2));
System.out.println(str1.equals(str5));
為什么這兩個句子返回的都是true啊,不是說好的比較地址的嗎?有疑惑啊
2015-10-22
舉報
2015-10-22
子木李 說得對,樓主還可以嘗試去建立一個類的兩個實例,內(nèi)部變量完全一樣,但是你用equals去比較時,返回的是false,這就會驗證你理解中的兩個對象使用 equals 是進行地址比較;但是你會發(fā)現(xiàn)兩個String,哪怕是通過new String()得到的(理論上是兩個對象),你會發(fā)現(xiàn)執(zhí)行 equals 操作會獲得 true, 這是因為java字符池機制的作用,關(guān)于這個可以推薦樓主看下 “JAVA 字符池”,這個應(yīng)該可以幫到樓主;
另外補充一些我知道的相關(guān)的一知半解:String對象是不可改變的,比如說String str1 = new String("hello"); 然后你讓 str1 = "java"; 你會發(fā)現(xiàn)str1只是改變了自身引用,對其之前的內(nèi)容 “hello” 串并不會有改變;
2015-10-22
string類型的equals方法的規(guī)則是這樣的:如果兩個對象的類型一致,并且內(nèi)容一致,則返回true,樓主理解的比較地址也是正確的,不過java的String類的機制是:對于String實例,運行時狀態(tài)會盡可能地確保任意兩個具有相同字符信息的String字面值指向同一個內(nèi)部對象,即是如果字面值一樣,那么它們其實是同一個地址,所以,返回的是true,str1、str2、str5都是“你好”