java字符串常量池

 

 先看一段代码

public class TestEquals {

    public static void main(String[] args) {

        String s = new String("1");
        s.intern();
        String s2 = "1";
        System.out.println(s == s2);

        String s3 = new String("1") + new String("1");
        // s3.intern();
        String s4 = "11";
        System.out.println(s3 == s4);

    }

}

 以下是 java se8虚拟机规范中的原文

为了得到字符常量,Java虚拟机需要检查CONSTANT_String_info结构中的码点序列。

1,如果某String实例所包含的Unicode码点序列与CONSTANT_String_info结构所给出的序列相同,而之前又曾在该实例上面调用过Sting.intern方法,那么此次字符常量获取的结果将是一个指向相同String实例的引用。

2,否则,会创建一个新的String实例,其中包含由CONSTANT_String_info结构所给出的Unicode码点序列;字符常量获取的结果是指向那个新String实例的引用。最后,新String实例的intern方法被Java虚拟机自动调用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值