码迷,mamicode.com
首页 > 其他好文 > 详细

关于 String.intern()

时间:2015-03-19 06:16:39      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

String.intern() 实际上会返回第一次生成该 String 内容的那个实例.

所谓内容就是 "abc", "123" 这个字符串的内容

 

1.

String s1 = "a"; (String@100)

那么 s1 就是第一次生成内容 "a" 的实例 @100, 所以如果

String s1 = "a"; (String@100)

String s2 = "a"; (String@100)

由于他们的内容相同, 又没有显式的 new, 所以会使用同一个实例, 自然底层的 char[] 也是同一实例的

 

2.

String s1 = "a"; (String@100) (char[]@200)

String s2 = new String("a"); (String@110) (char[]@210)

但是要注意一点, 这种情况虽然两个 String 实例不同, 他们底层的 char[] 却是同一实例

 

3.

String s1 = "ab"; (String@100) (char[]@200)

String s2 = "a";

String s3 = s2 + "b"; (String@110) (char[]@210)

用变量拼接字符串, 最终 String 实例不同, char[] 实例也不同

 

4. 

String s1 = "ab"; (String@100) (char[]@200)

String s2 = "a";

String s3 = s2 + "b"; (String@110) (char[]@210)

String i1 = s1.intern(); (String@100)

String i3 = s3.intern(); (String@100)

最后会发现 i1 == i3, 他们是同一个实例, 这就是 intern 的作用, 它会返回第一个实例化这个字符串内容的实例, 在这里就是 s1, 即使 s3 != s1, s3.intern() 也会返回 s1, 因为 s1 是第一个

 

5.

String s1 = new String("ab"); (String@100)

String s2 = s1.intern(); (String@110)

s1 != s2 要注意, 是因为 s1 使用了 new String(), 实际上在 "ab" 出现的时候, 就已经生成了一个 String 实例, 所以 String s1 = new String("ab"); 这一行程序, 会生成 2 个 String 实例, 虽然他们内部的 char[] 是一样的. 最终, s1.intern() 会返回第一个你看不到的实例

关于 String.intern()

标签:

原文地址:http://www.cnblogs.com/zemliu/p/4349242.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!