JAVA中的参数传递,不管你传的是什么,传过去的都只是一个副本而已,这个副本作为方法的局部变量保存在栈中。
如果传的是基本数据类型,修改这个值并不会影响作为参数传进来的那个变量,因为你修改的是方法的局部变量,是一个副本。
如果传的是一个对象的引用,也是一样的,也是一个副本,但是这个副本和作为参数传进来的那个引用指向的是内存中的同一个对象,所以你通过这个副本也可以操作那个对象。但是如果你修改这个引用本身,比如让他指向内存中的另外一个对象,原来作为参数传进来的那个引用不会受到影响。所以JAVA中只有值传递。
public class Main {
private static void change(String s, StringBuffer sb) {
s = "aaaa";
sb.setLength(0);
sb.append("aaaa");
}
public static void main(String[] args) {
String s = "bbbb";
StringBuffer sb = new StringBuffer("bbbb");
change(s, sb);
System.out.print(s+sb);
}
}//输出结果为:“bbbbaaaa”,而不是“aaaaaaaa”
public static void add(StringBuffer x,StringBuffer y){
x.append(y);
y=x;
}
public static void main(String[] args) {
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
add(a,b);
System.out.println(a+","+b);
}//输出:AB,B