public class Test 

      public static void main(String... args) 
     {
              String str = args[0]; 
              System.out.println(str.intern() == str); 
      }
}结果为false,求解

解决方案 »

  1.   

    这说明args[0]被默认new了String,返回堆中的对象给引用,intern返回字符串池中的,
    你可以试下
      String str ="aaa";
      System.out.println(str.intern() == str); 
    这就是true
      

  2.   

    http://topic.csdn.net/u/20071213/20/f94e76d5-dd4b-4e64-987b-1ab67feee5b6.html
      

  3.   

    intern是在字符串常量池中创建一个新的和原来字符串内容相同的字符串对象
      

  4.   

    首先看一下字符串池和intern()方法的知识:Java运行环境有一个字符串池,由String类维护。
    1、执行语句String str="abc"时,首先查看字符串池中是否存在字符串"abc",如果存在则直接将"abc"赋给str,如果不存在则先在字符串池中新建一个字符串"abc",然后再将其赋给str。
    2、执行语句String str=new String("abc")时,不管字符串池中是否存在字符串"abc",直接新建一个字符串"abc"(注意:新建的字符串"abc"不是在字符串池中),然后将其付给str。
    3、当调用intern 方法时,如果池已经包含一个等于此 String 对象的字符串(用 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并返回此 String 对象的引用。String str = args[0]; 
    args[]数组是一个String类型的,String类型是引用类型,给非基本数据类型数组赋值都要使用new关键字(数组的知识),所以,你再控制台输入的值使用new给args[0]赋值,这个字符串的值并没有放到字符串池中,所以,在执行str.intern()时,会重新创建一个str对象,返回的是新str对象的引用。不知这样回答是否明白,第一次回到问题,希望可以采纳!
      

  5.   

    当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(用 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并返回此 String 对象的引用。 
    它遵循以下规则:对于任意两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true