Java基础361问10问——String.intern方法

 public static void main(String[] args) {

        String s1 = new StringBuilder("ja").append("va").toString();
        show(s1.intern(), s1);

        String s2 = new StringBuilder("py").append("thon").toString();
        show(s2.intern(), s2);

        String s3 = new StringBuilder("he").append("llo").toString();
        show(s3.intern(), s3);

    }

返回结果是什么?

false  (没错,你没有看错是 false,的确是false)
true
true
public native String intern();

如果一个字符串对象在常量池中不存在,就复制一份到常量池中但是返回的还是该对象的引用
如果一个字符串对象在常量池中已经存在,就直接返回常量池中对象的引用

所以这里返回true是因为,常量池中不含有该字符串所以直接返回该对象的引用这是没问题的

为什么返回了false了呢?

这是因为java虚拟机默认字符串常量池里面有 “java”,“int”,"double"等字符串,所以这些字符串返回的是字符串常量池中的对象地址而不是堆内存中的地址,因此返回false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值