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[]类型的形参是传址的,所以形参的改变可以反映到实参,因为它们的地址是一样的。