因为
fName是final并使用文字字符串初始化,所以它是一个常量表达式。
所以指令
String name2 = fName + "Gosling"
编译为
String name2 = "James" + "Gosling"
编译成
String name2 = "JamesGosling"
因此,在字节码中,您具有
String name2 = "JamesGosling";String name3 = "JamesGosling";
因此,name2和name3都引用相同的文字字符串,该字符串是被嵌入的。
另一方面,
lName它不是最终值,因此不是常量表达式,并且串联发生在运行时而不是编译时。因此,串联将创建一个新的非中断String。



