public class Aed {
String str = new String("good");
char[] ch = {'a','b','c'};
int num = 10;
public void change(String str,char[] ch,int num){
str = "test ok";
ch[0] = 'g';
num = 20;
}
public static void main(String[] args) {
Aed a = new Aed();
a.change(a.str,a.ch, a.num);
System.out.print(a.str);
System.out.print(a.ch);
System.out.print(a.num);
}
}
public void change(String str,char[] ch,int num){
str = "test ok";
ch[0] = 'g';
num = 20;
}
改为
public void change(String str,char[] ch,int num){
this.str = "test ok";
this.ch[0] = 'g';
this.num = 20;
}
你这个是new的Aed这个对象,引用对象和值对象之间的区别
如果不加this.的话,change(String str,char[] ch,int num) 三个参数分别是:值传递、引用传递、值传递。所以只有这个引用传递的值被改变可。
除了8大基本数据类型和String算是值传递,其余的都是地址传递也叫引用传递引用传递,引用传递修改的是这个地址指向的堆中的内容,也就是修改的是堆中的值,所以改变了,而值传递出了这个方法就还是怎样就是怎样,如果在它前面加上this,那就指的是本类的属性,就会修改本类属性的值。