JVM针对String类型的优化
程序员文章站
2022-07-15 13:42:05
...
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进行字符串的叠加,避免字符串对象过多