diff --git a/notes/Java 基础.md b/notes/Java 基础.md index cda00ea0..675b0918 100644 --- a/notes/Java 基础.md +++ b/notes/Java 基础.md @@ -223,7 +223,7 @@ System.out.println(s4 == s5); // true Java 的参数是以值传递的形式传入方法中,而不是引用传递。 -Dog dog 的 dog 是一个指针,存储的是对象的地址。在将一个参数传入一个方法时,本质上是将对象的地址以值的方式传递到形参中。 +Dog dog 的 dog 是一个指针,存储的是对象的地址。在将一个参数传入一个方法时,本质上是将对象的地址以值的方式传递到形参中。而在方法中改变对象的成员变量值也会使原对象的成员变量发生变化,因为是改变同一个地址指向的内容。 ```java public class Dog { @@ -236,6 +236,10 @@ public class Dog { String getName() { 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 + } } ```