最近写了一点Java的代码,遇到了一个String类相关的问题。
首先,我们来看代码:
public class Test {
public static void main(String[] args) {
// 这条语句创建了多少个对象
String str = "welcome " + "to " + 1131;
}
}
问String str = "welcome" + "to" + 1131;
这条语句创建了多少个对象。
我们知道,在Java中,String对象是不可变的,所以对String类对象进行+操作,相当于是创建了一个新的String对象,而字符串常量也是一个String对象,所以这条语句中应该是创建了四个对象:"welcome "
、"to "
、"1131"
和"welcome to 1131"
这四个字符串,但是这个问题的正确答案却是1个,这是因为我们忽略了编译器优化这个关键问题。
我们使用javap命令来查看一下编译器的实际执行过程:
可以看到,编译器底层将"welcome "
、"to "
、1131
优化成了"welcome to 1131"
。所以实际上是创建了一个对象。