Java 参数传达方式(值传递/引用传递)

1,610 阅读1分钟

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 的值。