rub*_*buc 5 java autoboxing concatenation
当您将String与诸如int之类的基元连接在一起时,它是否首先对该值进行自动标记.
恩.
String string = "Four" + 4;
Run Code Online (Sandbox Code Playgroud)
它如何将值转换为Java中的字符串?
要查看Java编译器生成的内容,使用它javap -c来显示生成的实际字节码总是很有用:
例如,以下Java代码:
String s1 = "Four" + 4;
int i = 4;
String s2 = "Four" + i;
Run Code Online (Sandbox Code Playgroud)
会产生以下字节码:
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
Run Code Online (Sandbox Code Playgroud)
从中我们可以看到:
"Four" + 4,Java编译器(我使用的是JDK 6)非常聪明地推断出这是一个常量,所以在运行时没有计算工作,因为字符串在编译时连接起来"Four" + i,等效代码是new StringBuilder().append("Four").append(i).toString()| 归档时间: |
|
| 查看次数: |
807 次 |
| 最近记录: |