String相關操作:
String s1 = “1”;
String s2 = “1”;
此時s1,s2是同一個對象(s1 == s2 為true)。String是final的,”1”生成之後是不會在改變的,s1,s2都是”1”的引用。
String s1 = new String(“1”);
String s2 = new String(“2”);
此時s1,s2不是同一個對象,他們括號中的”1”都是指的同一個對象。這相當於根據”1”生成的兩個String對象,不是同一個對象。
String s1 = “a”; String s2 = “b”;
String s3 = s1 + s2;
String s4 = s1 + s2;
此時s3 和s4不是同一個對象。分別由s1 和s2拼接成的新字符串對象。
String s1 = “a”;
String s2 = “b”;
String s3 = “a” + “b”;
String s4 = “a” + “b”:
String s5 = s1 + “b”;
此時s3 和s4是同一個對象。編譯器發現”a”和”b”都是常量會幫我們優化成String s3 = “ab” String s4 = “ab”,此時還沒有編譯成字節碼,所以他們是同一個對象。而s3 跟s5就不是同一個對象了,s5中s1是變量,並不是常量,編譯器不會幫我們優化。