请问这道JAVA题到底正确答案是什么?

指出下列程序运行的结果publicclassExample{Stringstr=newString("good");char[]ch={'a','b','c'};publ... 指出下列程序运行的结果
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';
  }
}
A.good and abc
B.good and gbc
C. test ok and abc
D.test ok and gbc
题点分析: String类的对象是不可变的, 对字符串的任何改变,都是返回一个新的String类对象。这样的话把字符串的引用传递给一个方法,该方法对字符串的任何改变,对原引用指向的对象没有任何影响。
展开
 我来答
喃星呓
2013-03-16 · TA获得超过826个赞
知道小有建树答主
回答量:314
采纳率:0%
帮助的人:208万
展开全部
B,没记错的话JAVA中只有值传递没有引用传递。
所以一开始对象的属性的那个str指向new String()对象,new String()指向“good”常量。
ch指向数组的第一个元素的地址即,然后数组的第一二三个元素的地址分别指向常量‘a’,‘b’,‘c’。
当你调用change方法时候,把str和那个数组传了进去。
但是change里的str与ch[]其实都是形参,跟外面的属性没什么关系,只是名字相同罢了。
于是里面的str = "test ok"; 只是把里面这个形参的指向从“good”(new String?)改成了"test ok",(因为String是不可变的)
而数组传进来的也是值但是因为是可变的,所以直接作用在了原本的数组上。
所以外面打印的结果是字符串没变,数组变了。
haitangrexue
2013-03-13 · TA获得超过142个赞
知道小有建树答主
回答量:344
采纳率:100%
帮助的人:153万
展开全部
1.传值和传址的区别
2.你可以执行测试下啊,既然你都能发到网上。
追问
请问为什么【ex.change(ex.str, ex.ch);】这里只改变了数组的指针而不改变字符串的指针?难道数组用的不是指针吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ssh99999ssh
2013-03-13 · TA获得超过389个赞
知道小有建树答主
回答量:719
采纳率:50%
帮助的人:253万
展开全部
B , 这题目主要是考java 的值传参和引用传参的了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式