大家好!我是新手,初学JAVA,有点问题不懂,希望大家不吝指点。请问“在Java中,内容相同的字串常量只保存一份以节约内存。”这句话是否正确?如果正确,也就是相容内容的字符串常量在内存中只有一份拷贝。String s0="Hello";
String s1="Hello";
则 s0==s1 的判断结果应该为 true。另外有:String x="String".replace('g','G');
String z="String".replace('g','G');
String y="StrinG";
其中上机验证过,三个两两比较的结果皆不相同,但是他们都是同一份字符串常量的啊?希望高手帮忙解答,谢谢!

解决方案 »

  1.   

    你后面的是在运行期间才可以确定值的(调用了方法),在堆内存分配空间。所以肯定是不相同的。前面两个是字符串常量(注意常量二字),在编译期间就可以确定的,在字符串池中(虽然也是堆,但是他是唯一的)。。Java对字符串做了太多的优化。
      

  2.   

    内容相同的字串常量
    what does 常量 mean?
      

  3.   

    常量说的还是比较混淆,用String literal这个词就比较传神了
      

  4.   

    在java字符池中,如果你生命的两个字符串相同这,他们的s0 ==s1相等。只要愿意是字符串不能进行追加操作从而这应设计的。即 String s0 ="hello"; String s1 = "world" ; s0 + s1 得到的是新对象,不会追加到0或s1中。(s0、s1中的内容永远无法修改)。