Java 中的参数传递时传值呢? 还是传引用?

47
0
0
2021-02-13
Java 中的参数传递时传值呢? 还是传引用?

Java 中的参数传递时传值呢? 还是传引用?

Java 中的参数传递是按值传递。这意味着当你将一个变量传递给一个方法时,实际上是将该变量的值复制一份传递给了方法,而不是将变量本身传递给方法。

无论是基本数据类型还是对象引用,都是按值传递。下面分别说明基本数据类型和对象引用的情况:

  1. 基本数据类型:

    • 对于基本数据类型(如int、float、char等),方法得到的是该变量的一份拷贝,对该拷贝的修改不会影响原始变量的值。

    void modifyValue(int x) {
        x = 10;
    }
    
    public static void main(String[] args) {
        int number = 5;
        modifyValue(number);
        System.out.println(number);  // 输出:5,原始变量未被修改
    }
    

  2. 对象引用:

    • 对于对象引用,实际上是将引用的值(即对象的地址)传递给了方法,但方法内对引用的修改不会影响原始引用指向的对象。

    class MyClass {
        int value;
    }
    
    void modifyObjectReference(MyClass obj) {
        obj = new MyClass();
        obj.value = 10;
    }
    
    void modifyObjectValue(MyClass obj) {
        obj.value = 10;
    }
    
    public static void main(String[] args) {
        MyClass myObj = new MyClass();
        myObj.value = 5;
    
        modifyObjectReference(myObj);
        System.out.println(myObj.value);  // 输出:5,原始引用未被修改
    
        modifyObjectValue(myObj);
        System.out.println(myObj.value);  // 输出:10,原始引用指向的对象被修改
    }
    

总体来说,无论是基本数据类型还是对象引用,Java 中的参数传递都是按值传递。在传递对象引用时,传递的是引用的副本,但对引用的修改不会影响原始引用。然而,通过引用可以修改对象的内部状态。