Java参数传递的方式是值传递
传递基本数据时:
public int i = 10;
public static void main(String[] args) {
ReferenceTest referenceTest = new ReferenceTest();
System.out.println(referenceTest.i);
referenceTest.set(referenceTest.i);//这里传递的是基本数据类型
System.out.println(referenceTest.i);
}
public void set(ReferenceTest test){
test = new ReferenceTest();
test.i=100;
}
public void set(int i){
i = 1;
}
输出结果是:
10
10
传递引用变量时:
public int i = 10;
public static void main(String[] args) {
ReferenceTest referenceTest = new ReferenceTest();
System.out.println(referenceTest.i);
referenceTest.set(referenceTest);//这里传递的是引用
System.out.println(referenceTest.i);
}
public void set(ReferenceTest test){
test = new ReferenceTest();
test.i=100;
}
public void set(int i){
i = 1;
}
输出结果是:
10
10
在传递引用变量时传递的是引用变量的值,而不是这个引用,所以无论传递基本类型还是引用类型都是值传递。
public int i = 10;
public static void main(String[] args) {
ReferenceTest referenceTest = new ReferenceTest();
System.out.println(referenceTest.i);
referenceTest.set(referenceTest);//这里传递的是引用
System.out.println(referenceTest.i);
}
public void set(ReferenceTest test){
test.i=100;
}
public void set(int i){
i = 1;
}
输出结果是:
10
100
上面结果原因是:传递了主方法中 referenceTest 引用的值,也就是它指向对象的首地址,set() 方法中的 test 引用也指向了那块地址,所以在用 test 引用修改 i 的值时也修改了referenceTest 的值。