java输出异常多谢各位了。简单有关问题
java输出错误谢谢各位了。。简单问题
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。。
------解决思路----------------------
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[]类型的形参是传址的,所以形参的改变可以反映到实参,因为它们的地址是一样的。
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。。
------解决思路----------------------
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[]类型的形参是传址的,所以形参的改变可以反映到实参,因为它们的地址是一样的。