Skip to content

首先需要说明的是

  • 常量与常量拼接结果是放在常量池(编译期优化)
  • 常量池不会存放相同字符串(hashtable)
  • 只要其中一个是变量,拼接的时候,结果就是在堆(使用了stringbuiler)
  • 拼接结果调用intern,则主动将常量池还没有的字符串对象放入,并返回对象地址。

intern是一个native方法,调用的是底层c的方法。

  • jdk1.6,会将这个对象尝试放入串池,如果串池有,则直接返回串池中该对象的地址。如果没有,则将该对象复杂一份,放入串池,并返回串池对象的地址
  • jdk1.7起,变动在于,当串池没有该对象,会将对象的引用复制一份放入串池,返回串池的引用地址

Released under the MIT License.