当您将字符串与原始类型(如 int)连接时,是否首先自动装箱值。
例如
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)根据文档使用的方法 String.valueOf(int)创建整数的字符串表示。
关于java - Java 中的字符串连接和自动装箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12445064/