String的intern方法在虚拟机去永久区前后的差异
来源:互联网 发布:java博彦科技 编辑:程序博客网 时间:2024/05/16 01:40
此段程序在jdk1.6和jdk1.7两个版本的输出分别是两个false和一个false一个true
jdk1.6存在永久区,intern()方法会把首次遇到的实例复制到永久区中,并返回永久区中这个字符串实例的引用,如果不是首次遇到,返回的也是永久区的这个字符串实例的引用,所以intern()方法返回的都是永久区的实例引用,而StringBuilder的toString()方法的实例时在堆中,所以打印两个false
jdk1.7中不会再复制实例,只是在常量池中记录首次出现的字符串实例的引用,这个引用指向这个实例,所以第二个打印的是同一个对象的地址,为true,"java"这个字符串在toString()方法执行之前就存在于常量池中,所以intern()方法返回的是常量池中这个"java"的引用,所以返回false
阅读全文