使用串联由编译器转换为操作。StringStringBuilder
为了了解编译器是如何做到的,我将取一个示例类,编译它并使用jad反编译它,以查看生成的字节码是什么。
原始类:
public void method1() {
System.out.println("The answer is: " + 42);
}
public void method2(int value) {
System.out.println("The answer is: " + value);
}
public void method3(int value) {
String a = "The answer is: " + value;
System.out.println(a + " what is the question ?");
}
反编译的类:
public void method1()
{
System.out.println("The answer is: 42");
}
public void method2(int value)
{
System.out.println((new StringBuilder("The answer is: ")).append(value).toString());
}
public void method3(int value)
{
String a = (new StringBuilder("The answer is: ")).append(value).toString();
System.out.println((new StringBuilder(String.valueOf(a))).append(" what is the question ?").toString());
}
- 编译器在编译时执行了该操作。
method1
- 在串联上等效于手动使用 。
method2StringStringBuilder
- 关于串联肯定是不好的,因为编译器正在创建第二个而不是重用前一个。
method3StringStringBuilder
所以我的简单规则是,串联是好的,除非你需要再次连接结果:例如在循环中或当你需要存储中间结果时。