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对象所指向的地址。
如有哪里个人理解有问题,请各位大佬细心提出,在此感谢!