String str1 = "android";
String str2 = "android"; // T
String str3 = new String("android"); // F
String str4 = "and" + "riod"; // T
String str5 = "and"; // F
str5 = str5 + "riod";
android
關鍵在於。。。你要理解s1=new String("we are students"); s2="We are students"; 這兩個是不同的。。。。new是用新建一個對象的方法。。。。然後一種是放在常量池中的。。。你一下次再用這種方法去建立的時候。。。就會去常量池裏面找,因此 s2="We are students"; s3="We are students"; 這兩個是相同的。。。指向常量池中的"We are students";。。。 而s1=new String("we are students"); =new String(s1); 這兩個是不一樣的對象。。。。。儘管他們的內容是同樣的。。。 就像有兩我的。。。他們的名字是相同的。。。。可是並非同樣的人。。。。
堆棧:首先咱們要明確堆和棧的概念,在系統內存中將局部變量存放在棧中,將new出來的對象以及一些方法(類的代碼信息,static變量以及常量池)放在堆中。spa
如今就說一下==和equals的比較的實質:==比較的是變量的地址而equals比較的是變量的內容,那麼根據上面所說的能夠獲得==比較的是變量存儲在棧中的內容,equals比較的是變量存儲在堆中的內容。code