public class First
{
public static void main(String[] args)
{
String str1="Hello ",str2="World",str3="Hello World";
System.out.println(str3==("Hello "+"World")); //Prints true
System.out.println(str3==("Hello "+str2)); //Prints false
}
}
上述原因在JLS-中给出
• 由常量表达式(第 15.28 节)计算的字符串在编译时计算,然后将其视为文字。
• 在运行时通过连接计算的字符串是新创建的,因此是不同的。
我想问的是-为什么在运行时计算的字符串与在编译时计算的字符串不同?是因为内存分配,一个是在堆中分配内存,一个是在字符串池中分配内存还是有其他原因?请澄清。