一般我们变成很少使用到 intern这个方法,
这个方法是干什么的,做什么用的? 看一个例子:
- public static void main(String[] args) throws Exception {
- String a = "b" ;
- String b = "b" ;
- System.out.print( a == b);
- String c = "d" ;
- String d = new String( "d" ).intern() ;
- System.out.println( c == d);
- }
大家能看出来这个例子打印在控制台的消息吗?在这里控制台输出的结果都是true true,原因在于 intern 这个方法返回的是 返回字符串对象的规范化表示形式,当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(该对象由 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并且返回此 String 对象的引用。这时候c和d就是相等的。
下面在看一个例子:
- <span style="white-space:pre"> </span>String s1 = "ab123" ;
- String s2 = new String( "ab123" ) ;
- System.out.println( s1 == s2 );
- String s3 = s2.intern() ;
- System.out.println( s1 == s3 ) ;
看看这里输出的是什么,我想大家应该明白这个方法的作用是什么了吧!!
"abc".intern()方法的返回值还是字符串"abc",表面上看起来好像这个方法没什么用处。但实际上,它做了个小动作:
检查字符串池里是否存在"abc"这么一个字符串,如果存在,就返回池里的字符串;如果不存在,该方法会把"abc"添加到字符串池中,然后再返回它的引用。