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.println(ex.ch);
}
public void change(String str,char ch[]){
str=”test ok”;
ch[0]=’g';
}
}
请问最后输出的是什么?
答案是:good and gbc
解析:
public class Example {
String str = new String(“good”);
// str_1(暂时标记),指向内存中的一个String对象,该对象的值为"good"
char[] ch = {‘a’,'b’,'c’};
// ch_1,指向内存中的一个数组对象,该数组的[0],[1],[2]a,b,c
public static void main(String[] args) {
Example ex=new Example(); // 创建一个Example的实例,用于调用change方法
ex.change(ex.str,ex.ch); // 重点:执行change方法的过程!
// 输出str_1和ch_1,此时str_1还是指向"good"的,ch_1 还是指向之前的数组,但是驻数组内容已经被改变
System.out.print(ex.str+” and “);
System.out.println(ex.ch);
}
public void change(String str,char ch[]){
// str_2 指向的是 内存中 的 "good" 实例
// ch 指向的是 内存中 abc 的 数组
// 重点!!str是按值传递的,而ch是按地址传递的
str=”test ok”; // str_2指向 内存中 "test ok" 对象,而不是将"good"对象转变
ch[0]=’g'; // ch_2[0] 指向的是同一个对象的地址,更改的话,此对象会被改变
}
}