String str1="fly";
String str2="weight";
String str2="flyweight";
String str4=null;str4=str1+str2; //书上对这句话的解释是:使用+串联字符串会产生一个新的字符串对象,所以在程序中,第一次比较str3和str4对象是否为同一对象时,结果会是false!这里不明白,在连接完成后,str4的内容不就是flyweight了么,而字符串池中已经有了一个flyweight了啊,为什么 str4不会去引用那个已经存在的那个flyweight呢?System.out.println(str3==str4);str4=(str1+str2).intern();
System.out.println(str2==str4);
String str2="weight";
String str2="flyweight";
String str4=null;str4=str1+str2; //书上对这句话的解释是:使用+串联字符串会产生一个新的字符串对象,所以在程序中,第一次比较str3和str4对象是否为同一对象时,结果会是false!这里不明白,在连接完成后,str4的内容不就是flyweight了么,而字符串池中已经有了一个flyweight了啊,为什么 str4不会去引用那个已经存在的那个flyweight呢?System.out.println(str3==str4);str4=(str1+str2).intern();
System.out.println(str2==str4);
1, a new String instance created on Heap, containing "flyweight". It's assigned to str4;
2, "flyweight" is added to constant pool if it is not there beforehand.So, str4 and str3 is referring to different String instance.