public String intern()

本文详细解析Java String intern()方法的原理、用途及常见疑惑,包括字符串池的概念、方法实现细节和实际应用场景。
public String intern()返回字符串对象的规范化表示形式。 
一个初始为空的字符串池,它由类 String 私有地维护。 

当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(用 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并返回此 String 对象的引用。 

它遵循以下规则:对于任意两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true。 

所有字面值字符串和字符串赋值常量表达式都使用 intern 方法进行操作。字符串字面值在 Java Language Specification 的 §3.10.5 定义。 


返回:
一个字符串,内容与此字符串相同,但一定取自具有唯一字符串的池。
参考资料:JDK1.6帮助文档




String intern方法是查询String pool中是否有内容相等的值,如果有,则返回String pool中得字符的引用,如果没有,则将该String置于String pool中。
我的困惑是:什么情况下,String pool会没有该String内容相同的字符呢?
1.比如: String x = "abc";则String pool中有“abc”
2. String y = new String("abc");String pool中,也是有“abc"的。
找不到一种情况,String pool中,不存在一个非空String引用没有对应的String pool的情况。


非常量的就是,比如
StringBuilder sb = ...
sb.append('x').append('y');
String s = sb.toString();
这个s就不在pool里面


如果你使用了
  
          char data[] = {'a', 'b', 'c'};
          String str = new String(data);
  
构建了一个String 对象,则在Strint pool中是没有的对应的字符串的。需要通过intern来将该对象放置与string pool中。其余直接涉及的string literal都会在string pool中有一个内容相同的。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值