我在书上看到如下一段,有句话不明白。类java.lang.String的成员方法 
          public String intern()
首先判断当前字符串是否已经在字符串池中。如果当前字符串已经在字符串池中,则返回当前字符串的引用。如果当前字符串不在字符串池中,而且字符串池已经含有与当前字符串相同字符序列的字符串实例对象,则返回在字符串池中这个字符串的引用。如果在字符串池中不存在与当前字符串相同字符序列的字符串实例对象,则在字符串池中创建一个新的具有与当前字符串相同字符序列实例对象,并返回新创建的字符串的引用。
我不明白的是第二个如果: “如果当前字符串不在字符串池中,而且字符串池已经含有与当前字符串相同字符序列的字符串实例对象,则返回在字符串池中这个字符串的引用。”
有两个问题请教:1.既然字符串已经不在字符串池中了,怎么字符串池还会含有与当前字符串相同字符序列的字符串实例对象?
2.字符串和字符串实例对象有什么区别,难道他们不一样吗?

解决方案 »

  1.   

    这个就好比两个口袋K1,K2.
    一个口袋是本身就存在的K1.
    比如:String Str1 = "ABCD";另外在构造一个新的字符串时新建的一个口K2.
    比如:String Str2 = new String("ABCD");这个时候 你就用intern看Str2 是不是在K1里面.
    不知道我这种解释你能懂不.
      

  2.   

    http://topic.csdn.net/u/20080929/02/4e0ef626-98ee-4d6d-96ed-fe40afe8290b.html
    这个帖子看完应该就明白了.
      

  3.   

    String a = "abc";这时候abc在字符串池中
    String b = new String("abc");b不在字符串池中
    b = b.intern()虽然b之前不在字符串池中,但是a在,这样就直接返回a的内存地址,这样a==b了
    不知道你懂了么再给我的Blog做个广告吧  呵呵  对于String的认识
      

  4.   

    没办法,现在有问题就是API,再不行源代码~
    我是路过接分的~
      

  5.   

    just说的很对...那个实例是原来存在的与当前 字符串 相同的 地址引用...