commit
f7797a3e18
|
@ -223,7 +223,7 @@ System.out.println(s4 == s5); // true
|
|||
|
||||
Java 的参数是以值传递的形式传入方法中,而不是引用传递。
|
||||
|
||||
Dog dog 的 dog 是一个指针,存储的是对象的地址。在将一个参数传入一个方法时,本质上是将对象的地址以值的方式传递到形参中。
|
||||
Dog dog 的 dog 是一个指针,存储的是对象的地址。在将一个参数传入一个方法时,本质上是将对象的地址以值的方式传递到形参中。而在方法中改变对象的成员变量值也会使原对象的成员变量发生变化,因为是改变同一个地址指向的内容。
|
||||
|
||||
```java
|
||||
public class Dog {
|
||||
|
@ -237,6 +237,10 @@ public class Dog {
|
|||
return name;
|
||||
}
|
||||
|
||||
void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
String getObjectAddress() {
|
||||
return super.toString();
|
||||
}
|
||||
|
@ -251,6 +255,9 @@ public class PassByValueExample {
|
|||
func(dog);
|
||||
System.out.println(dog.getObjectAddress()); // Dog@4554617c
|
||||
System.out.println(dog.getName()); // A
|
||||
func2(dog);
|
||||
System.out.println(dog.getObjectAddress()); // Dog@4554617c
|
||||
System.out.println(dog.getName()); // C
|
||||
}
|
||||
|
||||
private static void func(Dog dog) {
|
||||
|
@ -259,6 +266,13 @@ public class PassByValueExample {
|
|||
System.out.println(dog.getObjectAddress()); // Dog@74a14482
|
||||
System.out.println(dog.getName()); // B
|
||||
}
|
||||
|
||||
private static void func2(Dog dog) {
|
||||
System.out.println(dog.getObjectAddress()); // Dog@4554617c
|
||||
dog.setName("C");
|
||||
System.out.println(dog.getObjectAddress()); // Dog@4554617c
|
||||
System.out.println(dog.getName()); // C
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user