ええと、String の + による連結は
String の + による連結、についての正解は、今時のコンパイラは賢いから普通は気にしなくて良い、だよね?
$ cat Foo.java class Foo { String foo(String s0, String s1, String s2, String s3, String s4, String s5, String s6, String s7) { return s0 + s1 + s2 + s3 + s4 + s5 + s6 + s7; } } $ javac Foo.java $ javap -c Foo Compiled from "Foo.java" class Foo extends java.lang.Object{ Foo(); Code: 0: aload_0 1: invokespecial #1; //Method java/lang/Object."<init>":()V 4: return java.lang.String foo(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String); Code: 0: new #2; //class java/lang/StringBuilder 3: dup 4: invokespecial #3; //Method java/lang/StringBuilder."<init>":()V 7: aload_1 8: invokevirtual #4; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 11: aload_2 12: invokevirtual #4; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 15: aload_3 16: invokevirtual #4; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 19: aload 4 21: invokevirtual #4; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 24: aload 5 26: invokevirtual #4; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 29: aload 6 31: invokevirtual #4; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 34: aload 7 36: invokevirtual #4; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 39: aload 8 41: invokevirtual #4; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 44: invokevirtual #5; //Method java/lang/StringBuilder.toString:()Ljava/lang/String; 47: areturn }
あー今気付いたけど打ち消し線が付いてたやw まいいや。このままにしとこ