java输出错误谢谢各位了。。简单问题

qq_21611037 2014-10-06 04:01:42
public class test3 {
String str=new String("Good morning!");
char[] scr={'a','b','c'};
public static void main (String []args){
test3 cvd=new test3();
cvd.change(cvd.str, cvd.scr);
System.out.println(cvd.str+cvd.scr);
System.out.println(cvd.str);
}
public void change(String str,char scr[]){
str="2222";
scr[0]='g';
}

}


为什么输出是

Good morning![C@64c3c749
Good morning!


str不是已经变了吗还有数组怎么。。不是gbc。。


...全文
162 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaoqiangaolong 2014-10-06
  • 打赏
  • 举报
回复
public class test3 { String str=new String("Good morning!"); char[] scr={'a','b','c'}; public static void main (String []args){ test3 cvd=new test3(); cvd.change(cvd.str, cvd.scr); System.out.println(cvd.str+cvd.scr[0]+cvd.scr[1]+cvd.scr[2]); System.out.println(cvd.str); } public void change(String str,char scr[]){ this.str="2222"; scr[0]='g'; } } 按上面的写法才能实现你想要的效果。 因为cvd.scr是一个地址,所以打印cvd.scr并不能打印出里面的内容,只是打印出了数组的首地址。 change方法的String类型的形参是拷贝传值(也就是说形参与实参的地址不一样),所以方法体内改变形参的值并不能使实参的值也改变,因为它们的地址不一样。char[]类型的形参是传址的,所以形参的改变可以反映到实参,因为它们的地址是一样的。

62,621

社区成员

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

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