字符串常量池,运行时常量池,静态常量池

package string;

public class StringInternMethodPractice1 {
    public static void main(String[] args) {
        StringBuilder stringBuilder2 = new StringBuilder("计算机软件");
        String str2 = stringBuilder2.toString();
        String str3 = str2.intern();
        // 加载这个类的时候,Class文件中的常量池加载到运行时常量池,运行时常量池有”计算机软件“这个常量(以char数组的形式存在)
        // 然后会在堆中生成一个字符串对象,字符串对象中的char数组指向运行时常量池中的”计算机软件“
        // 最后在字符串常量池记录一下这个字符串对象的引用
        // 调用str2.intern()方法时,会首先判断str2指向的字符串对象里的字符串是否首次出现在运行时常量池
        // 这里非首次出现,所以会将字符串常量池中记录的引用返回给str3
        // 虽然str3和str2指向的字符串对象都是在堆上,但是并非同一个对象,所以比较为false
        System.out.println(str3 == str2);
    }
}

图示解析


字符串常量池,运行时常量池,静态常量池.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容