![](/img/trans.png)
[英]What is difference between Long object and primitive type long in Java?
[英]what is the difference between passing an object and a primitive data as the parameter in 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.