據我所知,字符串連接「+」操作符在Java中使用StringBuilder的,這樣的東西一樣實現:關於「+」操作符和StringBuilder的實施
String s = "foo" + "bar"
內部編譯如下:
String s = new StringBuilder().append("foo").append("bar").toString();
所以,我想是這樣的:
String foo1 = "foobar";
String foo2 = new String("foobar");
String foo3 = "foo" + "bar";
char[] fooarray = {'f','o','o','b','a','r'};
String foo4 = new String(fooarray);
接下來我測試這些針對彼此使用==運算符。結果大部分是我所期望的:foo2和foo4沒有爲其他字符串返回「==」。
但是,foo3 == foo1返回true。這是什麼原因? StringBuilder類的toString方法內部調用「new String」,所以foo3不應該是一個獨特的對象,就像foo2一樣?
兩串的字符串連接*文字*由* *編譯完成,而不是在運行時。所以寫''foo「+」bar「'和寫foobar''是一樣的。它允許您將字符串文字分成多行,而不會影響性能。 – Andreas
另外,如果你的字符串是'final',那麼即使在編譯時's s = s1 + s2'也會發生,如果s1和s2是引用字符串 – TheLostMind