都在代码里了
public static void main(String[] args) { String str = "str"; final String finalString = "str"; String str1 = "str01"; String str2 = "str"+ "01"; System.err.println(str1 == str2); //JDK1.6后,常量字符串的+操作,在编译阶段会直接优化成一个字符串 //所以str1和str2指向常量池中的同一引用地址 String str3 = str + "01"; //编译器自动调用StringBuilder.apend()方法添加 //虽然内容一样,但地址是不一样的 System.err.println(str1 == str3); String str4 = finalString + "01"; //final变量在编译后会直接替换成对应的值,故所以str4="str" + "01" //再加上编译器的优化,会直接合并成str4="str01",与str01相等 System.err.println(str1 == str4); String str5 = new String("str01").intern(); //intern方法返回字符串池中的对象,所以相等 System.err.println(str1 == str5); }