public class CountTest
{
public static void main(String[] args)
{
String a = "abc";
String b = a+"de";
String c = "abcde";
String d = "abc"+"de";
System.out.println(b==c);
System.out.println(d==c);
System.out.println(b==d);
}
}
结果:
false
true
false
上述分别是源码,和对class文件进行反汇编后内容。
由此可见,虚拟机在将.java编译成字节码的时候进行了两个优化。
1.从
String d = "abc"+"de";
以及对应的反汇编的代码,可见虚拟机针对这种直接字符串进行了优化,直接变成一个String对象
2.从
String a = "abc";
String b = a+"de";以及对应的反汇编的代码,可以看出在这种情况下,虚拟机引入了线程不安全的StringBuilder进行字符串的叠加,避免字符串对象过多
本文通过一个简单的Java程序示例,介绍了JVM在处理字符串拼接时所采用的两种优化方式:直接字符串拼接优化为单一String对象及使用StringBuilder进行线程不安全的字符串叠加,以减少对象创建。

2880

被折叠的 条评论
为什么被折叠?



