ええと、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 まいいや。このままにしとこ