public class J0 {
public static void main(String[] args) {
String str1 = new String("strOne");
String str2 = new String("strOne");
String str3 = "strTwo";
String str4 = "strTwo";
System.out.println(str1 == str2);
System.out.println(str3 == str4);
}
}
估計(jì)答案是什么?
是不是false,false ?
因?yàn)?String 類不能直接 "==" 號(hào)比較!new 出來的兩個(gè)String對(duì)象不在同一內(nèi)存。
應(yīng)該用 "equals()"。
------------------------------------
可是答案是:false,true;
------------------------------------
怎么理解呢?
String str = new String("string");
?與 String str = "string";
聲明:以下解釋是保證正確的,我會(huì)從內(nèi)存空間上來解釋,比較清楚。
區(qū)別是,new String是在堆空間上分配一個(gè)空間,將指針指向這個(gè)空間,每一個(gè)new都是新的空間,==判斷當(dāng)然是不等。
而String str = "ssss",說一下,在每種語(yǔ)言中對(duì)于字符串都有特殊的處理。
Java有一個(gè)專門的字符串池來保存可以重用的字符串。對(duì)于相同的字面值(也就是"雙引號(hào)里面你看到東西")相同,多少個(gè)變量他們都指向相同的空間,==判斷當(dāng)然相等。
所以最正確的判斷字符串內(nèi)容相等的方法,就是用equals方法。String類這個(gè)immuable的類已經(jīng)覆蓋了這個(gè)從Object類繼承的eqauls方法,達(dá)到了對(duì)于內(nèi)容相等的判斷。
posted on 2007-01-05 09:19
壞男孩 閱讀(744)
評(píng)論(0) 編輯 收藏 所屬分類:
java命令學(xué)習(xí)