java string 常量池問題

2021-08-20 03:48:13 字數 881 閱讀 9088

字串相加,只要有變數參與的,那麼就不會使用常量池裡的字串引用。

如果是string s3 = "ab";

string s5 = "a" + "b";

這種在相加過程中沒有變數參與的字串參加,會使用常量池。所以,s3 == s5的值是true。

反正別的不多說,具體看程式,看了下面的,那一切都懂了(基於jdk1.8)

string s1 = "a";

string s2 = "b";

string s3 = "ab";

string s4 = s1 + s2;

string s5 = "a" + "b";

string s6 = s1 + "b";

stringbuffer s7 = new stringbuffer("abc");

string s8 = s7.substring(0, 2);

system.out.println(s3 == s4);// f

system.out.println(s3.equals(s4));// t

system.out.println(s3 == s5);// t

system.out.println(s3.equals(s5));// t

system.out.println(s3 == s6);// f

system.out.println(s3.equals(s6));// t

system.out.println(s4 == s6);// f

system.out.println(s4.equals(s6));// t

system.out.println(s4 == s8);// f

system.out.println(s4.equals(s8));// t

java String 連線問題

string s new string hello 與 string s2 hello 建立的區別 對於string s2 hello 現在棧中建立乙個 string 物件引用的變數 s,然後查詢 hello 字串是否被儲存在常量池中,如果沒有則會將 hello 放入常量池,最後s 將指向這個物件位...

快取常量池

亞信面試題 先說結論 integer a 127 integer b 127 integer c 128 integer d 128 a b true c d false integer a new integer 127 integer b new integer 127 integer c ne...

關於常量池

這裡暫且把integer作為包裝類的代表來說明.我們知道每次new都是建立乙個新的物件,由於 比較的是記憶體位址,所以下面的 不會為true string s1 new string 1 string s2 new string 1 system.out.println s1 s2 false但是下...