直接上代码(学习过程中总结,希望有所帮助)
package demoPackge;
public class FinalTest {
public static void main(String[] args) {
String str0 = "helloWorldChina";
String str1 = "helloWorld";
String str3 = str1 + "China";
System.out.println(str0 == str3);//false
//“+”生成了一个新的对象,str3返回的地址和str0的地址不同,所以返回 false
final String str2 = "helloWorld";
String str4 = str2 + "China";
System.out.println(str0 == str4);//true
//str2在编译期间就给定了确切的值,所以编译器将它当做常量使用,
//因此str0与str4引用了常量池中同一个字符串字面量的地址,所以返回值为true
final String str5;
str5 = "helloWorld";
String str6 = str5 + "China";
System.out.println(str0 == str6);//false
//在编译期间设置str5,因为是在使用前进行的初始化,所以编译器没有对 “str5”进行事先合并处理
}
}