高手进来帮我解决一下这道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数组却变了?
展开
 我来答
sca_fy
2007-11-20 · 超过28用户采纳过TA的回答
知道答主
回答量:98
采纳率:0%
帮助的人:92.5万
展开全部
change方法里调用的str是方法的参数,不是Example的实例字段(是这个实例字段值的一个copy),这个参数确实变成“test ok”,但是方法退出后就被抛弃了。Example的实例字段str从来都没有变过。

另一面,change方法里的ch参数是对Example的ch对象的引用的一个copy。当change方法里这个ch[0]的值改变的时候,实际上是改变了(both)ch[0]所指向的位置,当方法退出后ch参数被抛弃,但是this.ch[0]还是指向了新位置(g)。
半碗面
2007-11-20 · TA获得超过200个赞
知道答主
回答量:238
采纳率:0%
帮助的人:152万
展开全部
实际上str只是一个指针 它的值是放在栈里面的 改变指针的值并没有真正改变它所指向的值

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

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

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

另外Sytem.out.print(ex.ch);这句System打少了一个s
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友af60faf09
2007-11-20 · TA获得超过1636个赞
知道大有可为答主
回答量:774
采纳率:0%
帮助的人:916万
展开全部
Example.str="good"
change.str="test ok"
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式