在Java中,對象是引用類型。與基本類型不同,將對象傳遞給方法時,傳遞的是對象在內存中的地址,而不是對象本身。因此,傳遞對象的過程實際上是傳遞對象的引用,也稱為引用傳遞。
在引用傳遞中,方法使用的是與對象相同的引用,因此可以修改對象的屬性。例如:
public class Person { private String name; public Person(String name) { this.name = name; } public void setName(String name) { this.name = name; } public String getName() { return name; } } public class Main { public static void main(String[] args) { Person person = new Person("John"); changeName(person); System.out.println(person.getName()); // 輸出:Jack } public static void changeName(Person p) { p.setName("Jack"); } }
上面的例子中,changeName()方法接收一個Person對象的引用p,然后將p的name屬性修改為“Jack”,因此在main()方法中輸出的結果是“Jack”。
與基本類型不同,Java中的對象可以為null,因此當使用對象引用作為參數時,需要進行非空校驗。例如:
public class Main { public static void main(String[] args) { Person person = null; changeName(person); System.out.println(person.getName()); // 拋出NullPointerException } public static void changeName(Person p) { if (p != null) { p.setName("Jack"); } } }
通過在方法中檢查對象是否為null,可以防止空指針異常。
在Java中,方法的參數可以是基本類型、對象或數組。對于基本類型,會將其包裝為對應的包裝類;對于對象和數組,使用引用傳遞。因此,當修改方法參數引用的對象或數組時,會影響實際對象或數組的值。