new String到底创建了几个对象

new String("a") + new String ("b")
对象1:new StringBuilder()
对象2: new String("a")
对象3: 常量池中的"a"
对象4:new String("b")
对象5: 常量池中的"b"
深入剖析: StringBuilder中的toString()
对象6: new String("ab")
常量池并没有存在a b,变量存在于对象内部

String s3=new String("1")+new String("1");//执行完这行代码,字符串常量池不存在“11”
s3.intern(); // jdk6:在字符串常量池中生成 ,"11" Jdk8:在常量池中存放的是指向S4对象中的字符串。
String s4="11" ;//此时的常量池不存在“11”,而是指向s4对象的地址。因此 S4=S3
System.out.println(s3==s4);  jdk6:false  jdk:true 因为常量池改变的原因

注意:s3.intern 和 s4发生交换,结果就会发生改变。

上一篇:Java String equals() 方法,== 与 equals() 的区别


下一篇:PI-S4 Proxy相关配置