帮忙看一道java的题目.. 5

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 c[]){str="test ok"; ch[0]='g'; } }
A、 good and abc B、 good and gbc C、test ok and abc D、 test ok and gbc

为什么选A?
经过验证,是选B的 答案错了
展开
 我来答
注册了很多个
推荐于2017-11-25 · 超过18用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:40.1万
展开全部
选项是B不是A
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 c[]){
str="test ok";
ch[0]='g';
}
}
因为str的类型是String,String的值是不能修改的,所谓的修改只会新创建新的String,而ex.str依然指向原来的String地址,所以它的值没有改变,依旧是“good”。 如果你想让其修改可以试试这么写,将String换成StringBuilder或者StringBuffer,当然你也可以修改change方法:
public class Example {
StringBuilder str=new StringBuilder("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(StringBuilder str,char c[]){
str.replace(0, str.length(), "test ok");
ch[0]='g';
}
}
皮殿下
2012-12-26 · TA获得超过173个赞
知道答主
回答量:56
采纳率:100%
帮助的人:21.5万
展开全部
选 B
因为str是String类型,String的值是不变对象的,所谓的不变对象就是每次创建新的String,就是在堆中产生一个新的对象。因此ex.str属性依然指向原来的String地址,其它的值还是指向原值,没有改变。 而ch都指向同一个,修改的是ch指向的地址的内容,所以改变。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
4everlovehj
2012-12-25 · TA获得超过319个赞
知道小有建树答主
回答量:299
采纳率:0%
帮助的人:190万
展开全部
1.str的类型是String,String的值是不能修改的,所谓的修改只会新创建新的String,而ex.str依然指向原来的String地址,所以它的值没有改变。
2.数组传递的是引用,即指向地址空间的变量,所以用这个变量来修改值时也就修改了内存地址空间里的值,因为这个地址里的数据是所有指向该地址的变量所共有的,所以在调用函数时,数组的值会发生改变
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dark19861201
2012-12-25 · TA获得超过2152个赞
知道大有可为答主
回答量:2584
采纳率:79%
帮助的人:1777万
展开全部
我理解你的问题是为什么change方法没能起作用对吧
其实,是因为当str和char作为参数时,它们只是把自己的引用地址传给了2个参数,所以change方法内部这两个变量其实不是这两个属性,因此改变它们的值自然也影响不到这个两个成员变量了
追问
ch[0]='g';    这不是改变对象的值了吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友a4f443af5
2012-12-25 · TA获得超过668个赞
知道小有建树答主
回答量:372
采纳率:54%
帮助的人:72.1万
展开全部
好吧, 用编译器, 答案是 good and gbc
注意change方法参数名是c[] 方法体中是ch[0]但是这影响不大
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式