実際、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
}
String
ご覧のとおり、複数のインスタンスが読み込まれるのではなく、1 行が 4 行目に読み込まれます。
編集:ソース ファイルはjavac
バージョン 1.6.0_06 を使用してコンパイルされました。The Java Language Specification, Third Edition (およびJon Skeet's answerで言及されている同じセクション) を見ると、コンパイラが複数行String
を単一の に連結する必要があるかどうかについての参照を見つけることができなかったString
ので、この動作はおそらくコンパイラです実装固有。