Java 中物件傳遞和返回


眾所周知,Java 中始終是按值傳遞,而不是按引用傳遞。因此,本文將重點介紹在傳遞基本型別和傳遞引用到方法的情況下的驗證方式。

當基本型別作為引數傳遞給方法時,分配給該基本型別的數值將傳遞給該方法,並且該數值對該方法來說是區域性的,這意味著方法對該數值的任何更改都不會改變您傳遞給該方法的基本型別的數值。

當將引用傳遞給方法時,Java 仍然遵循按值傳遞的相同規則,讓我們瞭解一下它是如何發生的。

眾所周知,Java 中的引用儲存已建立物件的記憶體位置(如果已分配給該引用,否則初始化為 null)。此處需要記住的是,引用的值是分配給該特定引用的物件的記憶體位置,因此,每當我們將引用作為引數傳遞給任何方法時,我們實際上是傳遞分配給該特定引用的物件的記憶體位置。從技術上講,這意味著目標方法擁有我們建立物件的記憶體位置,並且可以訪問它。因此,如果目標方法訪問我們的物件並更改其任何屬性,那麼我們將在原始物件中遇到更改後的值。

示例

線上演示

public class PassByValue {
   static int k =10;
   static void passPrimitive(int j) {
      System.out.println("the value of passed primitive is " + j);
      j = j + 1;
   }
   static void passReference(EmployeeTest emp) {
      EmployeeTest reference = emp;
      System.out.println("the value of name property of our object is "+ emp.getName());
      reference.setName("Bond");
   }
   public static void main(String[] args) {
      EmployeeTest ref = new EmployeeTest();
      ref.setName("James");
      passPrimitive(k);
      System.out.println("Value of primitive after get passed to method is "+ k);
      passReference(ref);
      System.out.println("Value of property of object after reference get passed to method is "+          ref.getName());
   }
}
class EmployeeTest {
   String name;
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
}

輸出

the value of passed primitive is 10
Value of primitive after get passed to method is 10
the value of name property of our object is James
Value of property of object after reference get passed to method is Bond

更新於:2020年6月25日

5K+ 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.