Действительно, в Java компилятор превратит String
в константу.
class LongLongString
{
public LongLongString()
{
String newString = "This is a really long long long long long" +
" long long long long long long long long long long long long " +
" long long long long long long long long long string for example.";
}
public static void main(String[] args)
{
new LongLongString();
}
}
Составлено в:
Compiled from "LongLongString.java"
class LongLongString extends java.lang.Object{
public LongLongString();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: ldc #2; //String This is a really long long long long long long long long long long long long long long long long long long long long long long long long long long string for example.
6: astore_1
7: return
public static void main(java.lang.String[]);
Code:
0: new #3; //class LongLongString
3: dup
4: invokespecial #4; //Method "<init>":()V
7: pop
8: return
}
Как видно, в строке 4 загружается одна строка, а не несколько String
загружаемых экземпляров.
Редактировать: Исходный файл был скомпилирован с использованием javac
версия 1.6.0_06. Глядя на Спецификацию языка Java, третье издание (и тот же раздел, упомянутый в ответ Джона Скита ), я не смог найти никаких ссылок на то, должен ли компилятор объединять мульти -line String
в один String
, так что это поведение, вероятно, зависит от реализации компилятора.