本文环境 jdk8
目录
new String ("a") + new String ("b") 会创建几个对象
new String ("ab") 会创建几个对象
看字节码,可以看出是两个对象
对象1:new 关键字在堆空间创建的
对象2:字符串常量池中的对象 “ab”,字节码指令:ldc
new String ("a") + new String ("b") 会创建几个对象
深入剖析,是六个对象
对象1:new StringBuilder ()
对象2:new String ("a")
对象3:常量池中的 "a"
对象4:new String ("b")
对象5:常量池中的 "b"
深入刨析:StringBulider 的 toString ():
对象6:new String ("ab")
注意:toString () 的调用,在字符串常量池中,没有生成 "ab"
intern () 的使用:jdk6 vs jdk7/8
String 的 intern()的使用:
jdk1.6 中,将这个字符串对象尝试放入串池
如果串池中有,则并不会放入。返回已有的串池中的对象的地址
如果没有,则会把此对象复制一份,放入串池,并返回串池中的对象地址
jdk1.7 起,将这个字符串对象尝试放入串池
如果串池中有,则并不会放入。返回已有的串池中的对象的地址
如果没有,则会把对象的引用地址复制一份,放入串池,并返回串池中的引用地址