java中参数传递


java中参数传递

Java的参数是以值传递的形式传入方法中,而不是引用传递,
例:一下代码中Dog dog的dog是一个指针,存储的是对象的地址,将一个参数传入一个方法时,本质上是将对象的地址以值的形式传递到形参中。

public class Dog {

    String name;

    Dog(String name) {
        this.name = name;
    }

    String getName() {
        return this.name;
    }

    void setName(String name) {
        this.name = name;
    }

    String getObjectAddress() {
        return super.toString();
    }
}

在方法中改变对象的字段值会改变原对象的该字段值,因为引用的是同一个对象啊。

class PassByValueExample {
    public static void main(String[] args) {
        Dog dog = new Dog("A");
        func(dog);
        System.out.println(dog.getName());          // B
    }

    private static void func(Dog dog) {
        dog.setName("B");
    }
}

但是如果在方法中将指针引用了其他对象,那么此时方法里的和方法外的两个指针指向了不同的对象,在一个指针改变其所指向的对象的内容时,对另外一个指针的所指向的对象没有影响。

public class PassByValueExample {
    public static void main(String[] args) {
        Dog dog = new Dog("A");
        System.out.println(dog.getObjectAddress()); // study.Dog@15db9742
        func(dog);
        System.out.println(dog.getObjectAddress()); // study.Dog@15db9742
        System.out.println(dog.getName());          // A
    }

    private static void func(Dog dog) {
        System.out.println(dog.getObjectAddress()); // study.Dog@15db9742
        dog = new Dog("B");
        System.out.println(dog.getObjectAddress()); // study.Dog@6d06d69c
        System.out.println(dog.getName());          // B
    }
}

也就是说,main函数里的dog和方法中新建的对象的dog指向的不是同一个地址,当方法里的dog对象的字段值改变时,并不会影响外面的dog对象所指向的地址。

如有哪里个人理解有问题,请各位大佬细心提出,在此感谢!


文章作者: Loole
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Loole !
评论
  目录