![](/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.