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的值,关于字符串对象的修改原理谁能帮我讲一下,谢谢
你的第二个程序中
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');这样好好想想吧