确切的规则是在Java语言规范拼写,§5.1.11. String Conversion
根据这些规则,"str" + bool
相当于:
"str" + new Boolean(bool).toString()
这就是说,允许编译器相当大的余地究竟怎么了评估整体表达。来自JLS §15.18.1. String Concatenation Operator +:
一个实现可能选择在一个步骤中执行转换和连接以避免创建并丢弃中间String对象。为了提高重复字符串连接的性能,Java编译器可以使用类或类似技术来减少通过评估表达式创建的中间对象的数量。
对于基元类型,实现还可以通过直接从基元类型转换为字符串来优化封装器对象的创建。
例如,我的编译如下:
boolean bool = true;
System.out.println("the value of bool is : " + bool);
完全等同于:
boolean bool = true;
System.out.println(new StringBuilder("the value of bool is : ").append(bool).toString());
他们导致相同的字节码:
Code:
0: iconst_1
1: istore_1
2: getstatic #59 // Field java/lang/System.out:Ljava/io/PrintStream;
5: new #166 // class java/lang/StringBuilder
8: dup
9: ldc #168 // String the value of bool is :
11: invokespecial #170 // Method java/lang/StringBuilder."<init>":(Ljava/lang/String;)V
14: iload_1
15: invokevirtual #172 // Method java/lang/StringBuilder.append:(Z)Ljava/lang/StringBuilder;
18: invokevirtual #176 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
21: invokevirtual #69 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
24: return
来源
2012-12-15 18:28:23
NPE
阅读本文:http://www.znetdevelopment.com/blogs/2009/04/06/java-string-concatenation/ –