看java.lang 包中String.java  源文件,即可以明白它的意思了。

解决方案 »

  1.   

    String str1 = new String("str1");是不是就是说str1也是间接引用呢?中间有个类似str0的直接应用?
      

  2.   

    String在JAVA里是class不是所谓的常量
      

  3.   

    intern方法上面的注释已经讲的很明白了不过,我想intern()==比较应该比较快吧,尤其是对非常长的相同字符串
      

  4.   

    这是我看java pitfalls的一点心得,不知道正确与否
      

  5.   

    加了new就新开内存了,指向了新的地址,并不是指向s0的。而s0是在内存里找到‘ddd’这个常量后,指向这个常量的地址,equals只是比较内容,跟内存地址没关系
      

  6.   

    我个人的理解:
    String s0= "ddd"; java主机在内存堆中存放"ddd",
    然后在堆栈中生成s0 指向内存堆中的地址。String s1 = new String("ddd");同样在内存堆中存放"ddd",
    然后在堆栈中生成s1指向内存堆中的地址。== 比较的是两个变量指向的地址是不是一样,
    equals 比较的是两个类型相同的变量存放的内容是不是相同
      

  7.   

    同意楼主的看法,这实际上在THINKING IN JAVA里已经交代了
    我不知道汉语怎么说,但楼主的意思应该不差的!
      

  8.   

    to jjcql(jh):new出来的内存是存放一个地址,这个地址就是s0的地址
      

  9.   

    to qlampskyface(天空的样子) :
      
    不是很清楚,new的东西都不重新开辟内存空间吗?如果是这样那怎么样才能建立一个新的ddd而不是它的引用。用clone吗?
      

  10.   

    to petertangh(蓝冰):new 确实开辟了内存空间,但是这个内存空间存放的是常量"ddd"的地址要想建立一个新的"ddd",我看只有用StringBuffer了,String恐怕没戏了
      

  11.   

    大家对这个赋值有什么看法
    String str =null;
    String str ="" ;
    String str = new String() ;
    String str = new String("ddd") ;
    这四个有什么不同呢?,
    对new 的,这个我知道,就是在内存中新增一个空间,new String("ddd")楼上的已经说的很详细了,但 str = null ,str ="",有什么区别呢?