【菜鸟求助】以下代码的输出结果。。。
public class AboutStr {
String str=new String("good");
char[] ch={'a','b','c'};
public static void main(String[] args) {
AboutStr ex=new AboutStr();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+" and ");
System.out.println(ex.ch);
}
public void change(String str,char[] ch1){
str="text ok";
ch1[0]='g';
}
}
为什么输出结果是 good and gbc 呢?
菜鸟
------解决方案--------------------以上可能解释的不够清楚,java参数传递都是值传递,只是基本数据类型传值,非基本类型传地址,基本类型可以直接修改其值,而非基本类型相当于是拷贝,只是和源对象指向了同一地址,他如果直接修改自己,比如:
public static void main(String[] args) throws IOException {
char[]test = {'a','b','c'};
exchange(test);
System.out.println(test);
}
private static void exchange(char[] test){
test = null;
}
如果它直接修改自己本身,对源对象不会有丝毫影响,但是他内部的属性修改是可以直接影响到的,比如A和B都指向地址C,A修改自己本身其实修改了自己指向的地址,可是他们共同指向C的属性是可以相互影响的,这就牵扯到深拷贝和浅拷贝了。
------解决方案--------------------\
字符串传的是值,但是数组传的是对象。。。就这样。。。
搞清传对象还是传值就行了