Merge pull request #351 from Zoctan/patch-4

增加 ”参数传递“ 中一点内容
This commit is contained in:
郑永川 2018-08-02 22:45:00 +08:00 committed by GitHub
commit f7797a3e18
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

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