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

解决方案 »

  1.   

    我自己只知道当执行s.intern()时,java先在String Pool里找与字符串变量s相等(用equals()方法)的字符串,若有则将其引用返回;若没有则在String Pool里创建一个与s的值相等的字符串对象,并将其引用返回。从中我们可以总结出intern()方法无论如何都将返回String Pool里的字符串对象的引用。
    但是并不理解深层的含义。
      

  2.   


    对于对象,是的。对于原生值(int,float)则是错的。其次,对于String对象,编译器会自动优化,也就是所有在编译期可以确定相同的String("xxx"方式,而不是new String(...)),会编译成相同对象的引用。而intern对象则是在整个JVM范围内,内容相同的字符串共享的一个引用,而且永远是指向第一个出现的。在你的代码里,
    第一abc是
    String s = new String("abc"); 
    然后是s
    接着是指向上面红色那个abc的s1,也就是说s1就是红色的abc,也就是intern