public class Example {
    String str = new String("good");        public static void main(String args[]) {
        Example ex = new Example();
        ex.change(ex.str);        
        System.out.print(ex.str);        
    }    public void change(String str) {
        str = "test ok";        
    }
}这段代码的输出结果是“good”,字符串str没有被修改
而下面这段代码,str被更改了public class Example {
    String str = new String("good");        public static void main(String args[]) {
        Example ex = new Example();
        ex.str = "cool";      
        System.out.print(ex.str);        
    }
}为什么第一段程序里那个方法没能修改str的值,关于字符串对象的修改原理谁能帮我讲一下,谢谢

解决方案 »

  1.   

    所谓字符串不可修改,指的是内存不可修改
    你的第二个程序中
    str只是个指针而已
    你将ex的str属性修改了,但是new String("good");这里创建的东西还在
    没有被修改掉,只是到后面会被gc给over掉顺便说一下,你的第一个程序也不能测试出字符串是否被修改
    因为那里没有对字符串本身进行操作,而是涉及到参数传递问题,可去我博客看我们说,string是不可修改的,而stringbuffer是可修改的,看的是什么??String str=new String("abc");
    StringBuffer sb=new StringBuffer("abc");
    //认真看下面的操作
    str.replace('a', 'e');
    sb.replace(0, 1, "e"); 
    //再看看str和sb都变成什么了??上面的例子就告诉你,string到底有没有变,为什么说stringbuffer是可变的
    为什么我们用string的replace方法的时候要str=str.replace('a','b');这样好好想想吧
      

  2.   

    这个问题真的是JAVA版块最热门之一啊........