String.intern()

intern方法主:是将当前字符串放入字符串常量池中,并返回常量池中该字符串的引用(JDK1.7及以上)不是原创,只是单纯记录自己的理解

        -第一种情况,常量池中有了,直接返回

//第一种情况,常量池有
//将字符串放入字符串常量的两种方法:1.直接使用显示的双引号,2.使用str1.intern()
String str1 = "abc";//常量池中已经有abc
String intern = str1.intern();//直接返回常量池的对象
System.out.println(intern == str1);

        -第二种情况 常量池中没有,再看堆中有没有

                1.堆中没有(好像不存在两个地方都没有的情况吧),在常量池中创建字符串的对象,并返回刚才在常量池中创建的对象的引

                2.堆中有了,还是在常量池中创建对象,只是该对象的引用直接指向堆中的对象,最后返回常量池中的对象的引用,只不过这个引用实际上就是堆中字符串对象的引用,这里可以将常量池中的对象看作是:方法栈上的一个变量(它就是一个引用的中转站),它相当于不创建对象,而是直接持有堆中对象的地址引用

//第二种情况,常量池中没有,堆中有
//将字符串放入字符串常量的两种方法:1.直接使用显示的双引号,2.使用str1.intern()
String str1 = new StringBuilder().append("ab").append("c").toString();//此时字符串常量池中只有ab和c,但是堆中有abc
str1.intern();//将abc放入字符串常量池,常量池中的对象直接指向堆中的abc
String str2 = "abc";
System.out.println(str1 == str2);//true

-

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值