在 Java 中将对象和原始数据作为参数传递有什么区别?

what is the difference between passing an object and a primitive data as the parameter in Java?

我对在 Java 中将对象和原始数据作为参数传递的区别有点困惑。我读到 post here explaining that when you pass a primitive data, you copy that data and pass it, but if you pass an object then you pass by the object reference. And I also read this discussion 解释说 Java 中没有传递引用。那么,以上两遍之间的真正区别是什么?为什么 Java 以不同的方式处理它们?提前致谢。

传递基元和对象引用之间没有区别。两者都是按值传递的。在第一种情况下,原始值被复制;在第二种情况下,参考值被复制。

传递原语时,实际上传递的是该变量值的副本。这意味着在被调用方法中所做的更改不会反映在原始变量中。

当您传递对象时,您不会传递副本,而是传递该对象的 'handle' 副本,您可以通过该副本访问和更改它。这个'handle'是一个'reference'。在此更改将反映在原始文件中。

现在有一件事,当你传递原始类型的数组变量时会发生什么。在这种情况下,您不会传递副本,所做的更改将反映在原始副本中。

需要明确的是,基本类型是按值传递的,类型的副本存在于函数内部。

未复制 Object,将对它的引用传递给函数。这意味着您可以在函数内更改 Object

但是,引用是按值传递的。当该发布从函数内创建一个新的 Dog 时,引用的值会发生变化。它不再是对传递给函数的 Dog 的引用,而是对新的

的引用。

只是为了澄清目前的回复

public class Car {

    private String type;

    public Car(String type) {
        this.type = type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public static void foo(Car someCar) {
        Car newCar = new Car("Sedan");//new object created
        someCar = newCar; //passed reference also points to newly created object
        someCar.setType("Coupe");//Referred object changes
        System.out.println(newCar.type);//Coupe
        System.out.println(someCar.type);//Coupe
    }

    public static void main(String[] args) {
        Car myCar = new Car("Sports");//new object created
        foo(myCar);//reference is passed by value
        System.out.println(myCar.type);//Sports
    }
}