高手进来帮我解决一下这道JAVA题目
publicclassExample{Stringstr=newString("good");char[]ch={'a','b','c'};publicstaticvoi...
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数组却变了? 展开
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数组却变了? 展开
3个回答
展开全部
change方法里调用的str是方法的参数,不是Example的实例字段(是这个实例字段值的一个copy),这个参数确实变成“test ok”,但是方法退出后就被抛弃了。Example的实例字段str从来都没有变过。
另一面,change方法里的ch参数是对Example的ch对象的引用的一个copy。当change方法里这个ch[0]的值改变的时候,实际上是改变了(both)ch[0]所指向的位置,当方法退出后ch参数被抛弃,但是this.ch[0]还是指向了新位置(g)。
另一面,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
而数组ch[0]是一个数据的内存值,而不是一个指针,所以它改变了,数组名才是它的指针
明白了吗?把 str="test ok"; 改为 this.str="test ok" ;就可以了
以后遇到这些问题要看它最终数据储存的内存是否改变.
另外Sytem.out.print(ex.ch);这句System打少了一个s
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Example.str="good"
change.str="test ok"
change.str="test ok"
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询