Java FAQ:new String("abc") という書き方
Java FAQ:S008 Q-07
public class C2008040600 { public static void main(String[] args) { String s1 = new String("abc"); String s2 = "abc"; } }
をコンパイルした後、javap -c を実行
Compiled from C2008040600.java public class C2008040600 extends java.lang.Object { public C2008040600(); public static void main(java.lang.String[]); } Method C2008040600() 0 aload_0 1 invokespecial #1 <Method java.lang.Object()> 4 return Method void main(java.lang.String[]) 0 new #2 <Class java.lang.String> 3 dup 4 ldc #3 <String "abc"> 6 invokespecial #4 <Method java.lang.String(java.lang.String)> 9 astore_1 10 ldc #3 <String "abc"> 12 astore_2 13 return
invokespecial が入るのが違うようだ。
なんとなく、以下がどうなるか確かめてみた。
あらかじめ計算されるようだ。
public class C2008040603 { public static void main(String[] args) { String s1 = new String("abc" + "def"); String s2 = "abc" + "def"; } }
をコンパイルした後、javap -c を実行
Compiled from C2008040603.java public class C2008040603 extends java.lang.Object { public C2008040603(); public static void main(java.lang.String[]); } Method C2008040603() 0 aload_0 1 invokespecial #1 <Method java.lang.Object()> 4 return Method void main(java.lang.String[]) 0 new #2 <Class java.lang.String> 3 dup 4 ldc #3 <String "abcdef"> 6 invokespecial #4 <Method java.lang.String(java.lang.String)> 9 astore_1 10 ldc #3 <String "abcdef"> 12 astore_2 13 return