package algorithms.com.guan.javajicu;
public class Example {
String str = new String("good");
char[] ch = {'a','b','c'};
public static void main(String[] args) {
Example ex = new Example();
ex.change(ex.str, ex.ch);
System.out.print(ex.str +"and");
System.out.print(ex.ch);
}
public void change(String str, char ch[]){
str= "test ok";// 1
ch[0]= 'g'; //2
}
}
上面代码输出结果为:goodandgbc
原因:Java中只有8中基本数据类型按值传递,实例对象包括包装类对象是按引用传递。
调用change()方法时传入的参数是String对象本身的地址值,在第1步未执行完成时,形参的str指向的是对象的成员变量str(实参)的地址值即”good”的地址值。而形参str是一个引用变量,执行完第1步时这个引用变量的指向的地址为”test ok”的地址。对于实例对象的成员变量str来说指向的地址并未改变仍是”good”。
对于数组 ch[],改变了ch[0]指向的地址值