簡體   English   中英

在Java中將對象和原始數據作為參數傳遞有什么區別?

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

對於將對象和原始數據作為Java參數傳遞之間的區別,我有些困惑。 我在這里讀了一篇文章 ,解釋說,當您傳遞原始數據時,您將復制該數據並將其傳遞,但​​是如果您傳遞一個對象,那么您將傳遞該對象引用。 我還閱讀了該討論,解釋了Java中沒有傳遞引用。 那么,上述兩次通過之間的真正區別是什么?為什么Java處理它們的方式有所不同? 提前致謝。

傳遞基元和對象引用之間沒有區別。 兩者都按值傳遞。 在第一種情況下,將復制原始值。 在第二種情況下,將復制參考值。

需要明確的是,原始類型是通過值傳遞的,該類型的副本就是函數內部存在的副本。

不復制Object ,將對它的引用傳遞給函數。 這意味着您可以在函數內更改Object

但是,引用按值傳遞。 當該發布從函數中創建新的Dog時,引用的值將更改。 它不再是對傳遞給函數的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
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM