2013-07-13 43 views
-5

我想这样做的所有操作与String.Then我得到这个输出如何System.out.println(s1 == s3.intern()); //返回true?

public class Stringtest { 

    public static void main(String[] args) { 
     String s1="abc"; 
     String s2="abc"; 
     String s3=new String("abc"); 
     String s4=new String("abc"); 
     System.out.println(s1.equals(s2)); 
     System.out.println(s1==s2); 
     System.out.println(s1==s3.intern()); 
     System.out.println(s3.equals(s4)); 
    } 
} 

为:

System.out.println(s1==s3.intern()); //return true 

为什么结果返回true

+0

Chinmoy,尝试阅读String的文档(从intern()'阅读顶部和文档:http://docs.oracle.com/javase/6/docs/api/java/lang/String.html – Augusto

回答

1

实习生使相同的不可变对象具有相同的参考以节省内存。当s3被拦截时,它被设置为从池中指向s1(因为它是一个文字,它被很容易地添加)。

由于它们具有相同的参考,==返回true。

+0

谢谢hexafraction – Chinmoy

+0

@Chinmoy请勾选此答案,如果它有帮助。 – hexafraction