String.intern()分析

String.intern()分析

String::intern()方法是个本地方法,它的作用是如果字符串常量池中已经包含一个等于此String对象的字符串,则返回代表池中这个字符串的String对象的引用;否则,则会将此String对象包含的字符串添加到常量池中,并且返回此String对象的引用。

仅限JDK8(元空间),JDK7运行结果是不同的
 判断这个常量是否存在于常量池。
  如果存在
   判断存在内容是引用还是常量,
    如果是引用,
     返回引用地址指向堆空间对象,
    如果是常量,
     直接返回常量池常量
  如果不存在,
   将当前对象引用复制到常量池,并且返回的是当前对象的引用

   String a1 = "AA";
        System.out.println(a1 == a1.intern()); //true ,a1引用==a1引用
        String a2 = new String("B") + new String("B");
        System.out.println(a2 == a2.intern());//true ,a2引用==a2引用
        String a3 = new String("B") + new String("B");
        System.out.println(a2 == a3);//false ,a2引用==a3引用
        System.out.println(a2.intern() == a3.intern());//true ,a2引用==a2引用
        System.out.println(a2 == a3.intern());//true ,a2引用==a2引用
        System.out.println(a3.intern() == a2.intern());// ,a2引用==a2引用
        System.out.println(a3 == a2.intern());//false ,a3引用==a2引用
        System.out.println(a3 == a3.intern());//false, ,a3引用==a2引用
        String a4 = new String("C") + new String("C");
        System.out.println(a4 == a4.intern()); //true ,a4引用==a4引用
        String a5 = new String("A") + new String("A");
        System.out.println(a1 == a5);//false ,a1引用==a5引用
        System.out.println(a1 == a5.intern());//true ,a21引用==a1引用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值