在您的示例中,固定文字比使用StringBuilder更有效。
固定文字将被编译器检测到并将被内联为单个值,因此这两行
String s = "one" + "two" + "three";
和
String s = "onetwothree";
将生成完全相同的字节码。
但是,如果串联不是通过文字而是通过函数调用完成的,则图片将有所不同。
当您需要动态追加字符串时,请使用StringBuilder而不是StringBuffer,因为它不同步,因此速度稍快。
这是示例字节码:
公共课测验{ private String s =“一个” +“两个” +“三个”;}公共课程Test2{ private String s2 =“ onetwothree”;}这些类生成的字节码为:
c: Temp> javap -c测试从“ Test.java”编译公共类Test扩展了java.lang.Object {公共Test(); 码: 0:加载_0 1:调用特殊#1; //方法java / lang / Object。“” :()V 4:aload_0 5:lcd#2;//字符串onetwothree 7:普特菲尔德#3;//字段s:Ljava / lang / String; 10:返回}c: Temp> javap -c Test2从“ Test2.java”编译公共类Test2扩展了java.lang.Object {公共Test2(); 码: 0:加载_0 1:调用特殊#1; //方法java / lang / Object。“” :()V 4:aload_0 5:lcd#2;//字符串onetwothree 7:普特菲尔德#3;//字段s:Ljava / lang / String; 10:返回}如您所见,两个变量的处理方式相同。
我认为这不属于语言规范,因为这“只是”编译器优化。
一个不同的编译器(我使用的是Sun编译器)可能在做完全不同的事情-只要行为不变就可以。



