String作为引用变量,为什么在run方法里改变了值,在main方法里却没有改变?
老生常谈的问题了,值传递和引用传递的区别,这里明显是值传递。在main方法中定义的str变量指向test字符串。执行run方法的时候流程是这样的:再创建一个局部变量str,把它赋值为test。注意,此str变量非main函数中的str变量,作用域不同。因此在run方法中改变的是run方法中局部变量str的值。
你的命名误导了你,这样看很容易看出 变量str的值根本没有改变过
这是一道经典面试题。run方法中,str变量是值传递,run方法中的str变量是外侧str变量的拷贝,在内存空间上占用的是不同的内存块。run方法中的str变量无论怎么变化,外侧str变量都不会受到影响
public static void main(String[] args) {
String str = "test";
StringBuffer strBuf = new StringBuffer("test");
run(str, strBuf);
System.out.println(str);
System.out.println(strBuf.toString());
}
public static void run(String str, StringBuffer strBuf) {
str += "test2";
strBuf.append("test2");
}
run方法里面str是参数的那个str,你改变的只是那个参数的值,而在执行run方法后,这个str就死掉了,而main里面的那个根本就没改变过