public class RuntimeConstantString {
/**
* Java 1.7及以上版本 intern使用
* (1) str=new String("1")不拼接 或者 String str="1" (非new拼接不影响),最终会在字符串常量池存这些字符串的值,所以无论str.inter()
* 还是str都是真实的在字符串常量中的值,故相同
* (2) 拼接str=new String("1")+new String("2") ,最终会在字符串常量池存这些字符串的地址,所以无论str.inter()
* 还是str都是真实的在字符串常量中的地址值,故相同
* (3) 默认的常驻字符串值(如java,double这些java的关键词)或者是之前自定义过的被字符串常量池新纳入的值(如例子中 计算机软件123)
* str.inter()返回的是真实的值,另外一个是地址,所以不相同
* */
public static void main(String[] args) {
String str1=new StringBuilder("计算机").append("软件").toString();
System.out.println(str1.intern()==str1); //true
String str2=new StringBuilder("ja").append("va").toString();
System.out.println(str2.intern()==str2); //false
String str22=new StringBuilder("ja")+new String("va");
System.out.println(str22.intern()==str22); //false
String str23=new String("a")+new String("a");
System.out.println(str23==str23.intern()); //true
String str24=new String("1")+new String("2");
System.out.println(str24.intern()==str24); //true
String str25=new String("dou")+new String("bl")+new String("e");
System.out.println(str25.intern()==str25); //false
String str3=new String("计算机软件").toString();
System.out.println(str3.intern()==str3); //false
String str4="计算机软件"+"123";
System.out.println(str4.intern()==str4); //true
String str5="计算机软件"+new String("123");
System.out.println(str5.intern()==str5); //false
String str6="计算机软件"+new String("12");
System.out.println(str6.intern()==str6); //true
}
}