一道面试题 求解答

柿子鸡蛋饭 2011-10-03 01:21:35

public class Example{
String str = new String("good");
char[] ch = {'a','b','c'};
public void static 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 ch[]){
str = "test ok";
ch[0] = 'g';
}
}


答案是good and gbc
...全文
115 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
SmileToCandy 2011-10-03
  • 打赏
  • 举报
回复
字符串是永远也不改变的, 这是jdk里面说的, 数组就不是这样了, 这个是靠字符串的不改变特性。
backet007 2011-10-03
  • 打赏
  • 举报
回复
恩 数组写入的是数据区吧 所以值被修改了
Thomas.Sir 2011-10-03
  • 打赏
  • 举报
回复
楼主分清楚String str = new String("good") 共创建了几个对象,而在change方法里面调用的是不同对象,建议画内存分布图,一目了然。
qybao 2011-10-03
  • 打赏
  • 举报
回复
public void change(String str,char ch[]){
str = "test ok";
ch[0] = 'g';
}

change方法里的str和Example的属性str是不同的两个变量,开始它们都指向"good"对象
在change方法中,str = "test ok";使得change方法的str变量指向新的"test ok"对象,但是Example的属性str的指向没有发生任何变化,所以ex.str还是"good"
同样的change方法中的ch和Example的属性ch是两个不同的变量,开始它们都指向一个字符数组{'a','b','c'},在change中,ch[0] = 'g'; 改变ch变量指向的数组对象的第一元素的值,因为Example的属性ch也指向相同的数组对象,所以Example的属性ch的第一个元素也就发生了变化,所以ex.ch就变成了gbc

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧