JDK1.7之下的inern用法

JDK1.7之下的inern用法:

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

String s = new String(“1aaa”);
生成了常量池的“1”和堆空间中的字符串对象。 s为堆空间的内存地址。

s.inern() 检查对象s是否在常量池中存在,如果存在然后返回该字符串在常量池中的地址。

String s2 = “1aaa”; s2指向的是“1aaa” 在常量池中的地址。因此
s2 == s.intern()为true。


        String s3 = new String("1a") + new String("1a");  
        s3.intern();  
        String s4 = "1a1a";  
        System.out.println(s4 == s3.intern());  true

String s3 = new String(“1a”) + new String(“1a”);
在常量池中生成字符串la,并在堆中生成s3指向的堆空间,内容为lala。
此时常量池中没有lala
s3.intern(); 检查常量池中是否有lala,如果没有,则将lala放入常量池中。并返回常量池的地址。

s.inern检查常量池中是否存在某一个常量,如果存在则返回这个常量的值。
如果不存在,将字符串s的内容放入String常量池中,具体在JDK1.7中常量池不需要再存储一份对象了,可以直接存储堆中的引用,也就是s==s.inern 返回true。

PS: s==s.inern并不总是成立。如果常量池中已经存在了这个字符串,则s==s.inern并不相等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值