高手进来帮我解决一下这道JAVA题目

来源:百度知道 编辑:UC知道 时间:2024/04/28 04:14:15
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 ");
Sytem.out.print(ex.ch);
}
public void change(String str,char ch[]){
str="test ok";
ch[0]='g';
}
}
为什么结果为good and gbc ?
怎么str没变而ch数组却变了?

change方法里调用的str是方法的参数,不是Example的实例字段(是这个实例字段值的一个copy),这个参数确实变成“test ok”,但是方法退出后就被抛弃了。Example的实例字段str从来都没有变过。

另一面,change方法里的ch参数是对Example的ch对象的引用的一个copy。当change方法里这个ch[0]的值改变的时候,实际上是改变了(both)ch[0]所指向的位置,当方法退出后ch参数被抛弃,但是this.ch[0]还是指向了新位置(g)。

实际上str只是一个指针 它的值是放在栈里面的 改变指针的值并没有真正改变它所指向的值

而数组ch[0]是一个数据的内存值,而不是一个指针,所以它改变了,数组名才是它的指针

明白了吗?把 str="test ok"; 改为 this.str="test ok" ;就可以了

以后遇到这些问题要看它最终数据储存的内存是否改变.

另外Sytem.out.print(ex.ch);这句System打少了一个s

Example.str="good"
change.str="test ok"