Из того, что я понимаю, Объединение строк «+» оператор в 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);
Далее я тестировал они друг против друга используют == operator. Результаты были в основном тем, что я ожидал: foo2 и foo4 не возвращали «==» для любой другой String.
Однако foo3 == foo1 возвращает true. Что является причиной этого ? Метод toString класса StringBuilder internall вызывает «новую строку», поэтому не должен быть foo3 уникальным объектом, как foo2?
Объединение строк из двух строки * литералы * сделано в * компилятором *, а не во время выполнения. Поэтому запись '' foo "+" bar "' такая же, как и запись 'foobar''. Он позволяет разделить строковый литерал на несколько строк без ущерба для производительности. – Andreas
Кроме того, если ваши строки являются «final», тогда даже «String s = s1 + s2» произойдет во время компиляции, если 's1' и' s2' являются ссылками на строковые литералы – TheLostMind