java.lang.String的Intern()方法的利弊

Java6 API  

public String intern()
Returns a canonical representation for the string object.

A pool of strings, initially empty, is maintained privately by the class String.

When the intern method is invoked, if the pool already contains a string equal to this String object as determined by the equals(Object) method, then the string from the pool is returned. Otherwise, this String object is added to the pool and a reference to this String object is returned.

It follows that for any two strings s and t, s.intern() == t.intern() is true if and only if s.equals(t) is true.

All literal strings and string-valued constant expressions are interned. String literals are defined in §3.10.5 of the Java Language Specification

Returns:a string that has the same contents as this string, but is guaranteed to be from a pool of unique strings.

官方文档:http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#intern()

优点

        1.intern()使得每个字符串都是字符串池中字符串的引用,而字符串池中的所有字符串都是唯一的,可以节省内存;

        2.通过引用来比较字符串的速度更快(==比equals(object)速度快)。

缺点:

         1.为了确保字符串池中的字符串都是唯一的,需要做大量工作;

         2.必须确保对所有的字符串都用了intern()方法,这样对他们比较时才能都用==,而且这种想法必须让团队中的所有成员知道;

         3.intern()后的字符串都存储在PermGen空间中,这个空间相对较小,因此会导致OutOfMemoryError ,即便此时空闲栈空间还很充足。

参考文章:

https://blog.codecentric.de/en/2012/03/save-memory-by-using-string-intern-in-java/

http://stackoverflow.com/questions/1091045/is-it-good-practice-to-use-java-lang-string-intern



转载于:https://my.oschina.net/liuyuanyuangogo/blog/311722

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值