1,2:java vm 中有个 string 池 ,s = "xxx" ,java 会先到 string 池中找,如果有,就不新建对象了 ,而使用 new 的,就会在程序空间里创建新的 string,而不去池里找
3,4,5,6:for any two strings s and t, s.intern() == t.intern() is true if and only if s.equals(t) is true.

解决方案 »

  1.   

    3,4,5,6:for any two strings s and t, s.intern() == t.intern() is true if and only if s.equals(t) is true.这只解释了两个intern()函数是否相等!对于我的3,4,5,6有什么指导呢?
      

  2.   

    obj3 == obj5 为什么会是false?
      

  3.   

    每当调用inern的时候,进入String类维护的私有程序范围内的内存池,然后返回一个指向内存池内相应字符串的指针,但是每个字符串只放入内存池一次。由于先创建的是obj1和obj2,它们的地址被先放入内存池,所以obj4、obj5都是返回的是内存池中的指针即obj1和obj2的地址,当然obj5的地址不和obj3的相等
      

  4.   

    true
    false
    false
    true
    trueobj3 == obj5 
    一个是String的实例,一个是对象的引用
    在进行==运算时,一个取值,一个取地址,故不等
    你比较obj4==obj5就是TRUE
    因为调用inern coordinate(什么) 的解释是正确的
    参看JDk文档false
      

  5.   

    ok!我来总结一下,大家看对不对!内存池里的obj1,obj2指向同一个字符串, 这个oldblue(jimmey)有解释,obj3则是指向另外新创建一个对象,而obj4,obj5由于都是intern的结果,其实都是返回的obj1,因为在池中肯定先发现obj1和调用他们对象equals()相等!所以会出现上述结果!