翻阅java api 给出的解释是

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

返回字符串对象的规范化表示形式。

我们都知道在java中存在字符串常量池。当我们采用    String s1 = "java"; 定义字符串的时候,字符串存储在常量池中。 而当我们 采用 String s2 = new String("java") ;定义字符串是字符串存储在堆内存中。 s1 == s2 的结果:false。 而当我们采用 String s3 = s2.intern(); 时 s1 == s3 的结果是true; 

那么intern() 方法究竟做了什么事情呢。当我们翻阅java 源码我们会发现 intern() 方法是native 方法。从 s1,s2,s3 的比较结果我们不难看出。intern() 方法所做的事情就是 当我们调用intern() 方法的时候 。如果常量池中存在 变量就会指向常量池中已存在的字符串, 如果不存在 就会在常量池中创建一个,然后变量指向该字符串。当且仅当 s.equals(t)为true时,s.intern() == t.intern() 为true。 至于能否通过 s.intern() == t.intern() 为true  来断定s.equals(t)为true,目前还没搞明白。知道的朋友可以告诉我。我自己也会在以后的去查一些资料,争取在以后的博客中告诉大家。

posted on 2016-01-15 16:06  哎,起个名字真难  阅读(156)  评论(0编辑  收藏  举报