当您将 String 与 int 等原语连接起来时,autobox价值第一。
ex.
String string = "Four" + 4;
它如何将值转换为字符串Java?
要查看 Java 编译器生成的内容,使用它总是有用的javap -c
显示实际生成的字节码:
例如下面的 Java 代码:
String s1 = "Four" + 4;
int i = 4;
String s2 = "Four" + i;
将产生以下字节码:
0: ldc #2; //String Four4
2: astore_1
3: iconst_4
4: istore_2
5: new #3; //class java/lang/StringBuilder
8: dup
9: invokespecial #4; //Method java/lang/StringBuilder."<init>":()V
12: ldc #5; //String Four
14: invokevirtual #6; //Method java/lang/StringBuilder.append:(Ljava/lang/
String;)Ljava/lang/StringBuilder;
17: iload_2
18: invokevirtual #7; //Method java/lang/StringBuilder.append:(I)Ljava/lan
g/StringBuilder;
21: invokevirtual #8; //Method java/lang/StringBuilder.toString:()Ljava/la
ng/String;
24: astore_3
25: return
由此我们可以看出:
- 如果是
"Four" + 4
,Java 编译器(我使用的是 JDK 6)足够聪明,可以推断出这是一个常量,因此在运行时不需要计算工作,因为字符串是在编译时连接的
- 如果是
"Four" + i
,等效代码是new StringBuilder().append("Four").append(i).toString()
- 这里不涉及自动装箱,因为有一个StringBuilder.append(int) http://docs.oracle.com/javase/6/docs/api/java/lang/StringBuilder.html#append%28int%29根据文档正在使用的方法String.valueOf(int) http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#valueOf%28int%29创建整数的字符串表示形式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)