Java 引數繫結
阿新 • • 發佈:2020-08-13
學習廖雪峰老師的JAVA教程的筆記
基本型別引數繫結
public class Main { public static void main(String[] args) { Person p = new Person(); int n = 15; // n的值為15 p.setAge(n); // 傳入n的值 System.out.println(p.getAge()); // 15 n = 20; // n的值改為20 System.out.println(p.getAge()); // 15還是20? } }class Person { private int age; public int getAge() { return this.age; } public void setAge(int age) { this.age = age; } }
輸出
15
15
結論:基本型別引數的傳遞,是呼叫方值的複製。雙方各自的後續修改,互不影響。
引用型別引數繫結
public class Main { public static void main(String[] args) { Person p= new Person(); String[] fullname = new String[] { "Homer", "Simpson" }; p.setName(fullname); // 傳入fullname陣列 System.out.println(p.getName()); // "Homer Simpson" fullname[0] = "Bart"; // fullname陣列的第一個元素修改為"Bart" System.out.println(p.getName()); // "Homer Simpson"還是"Bart Simpson"?} } class Person { private String[] name; public String getName() { return this.name[0] + " " + this.name[1]; } public void setName(String[] name) { this.name = name; } }
輸出:
HomerSimpson
BartSimpson
結論:引用型別引數的傳遞,呼叫方的變數,和接收方的引數變數,指向的是同一個物件。雙方任意一方對這個物件的修改,都會影響對方
public class Main { public static void main(String[] args) { Person p = new Person(); String bob = "Bob"; p.setName(bob); // 傳入bob變數 System.out.println(p.getName()); // "Bob" bob = "Alice"; // bob改名為Alice System.out.println(p.getName()); // "Bob"還是"Alice"? } } class Person { private String name; public String getName() { return this.name; } public void setName(String name) { this.name = name; } }
輸出
Bob
Bob
筆記:
引用型別引數傳遞傳的都是地址
name=fullname,它們指向的是同一個陣列的地址,所以fullname改變陣列元素時,name的陣列元素也會改變(因為它們指向的是同一個陣列)
name=bob,一開始name指向 “bob指向的地址”,也就是"BOB"這個物件的地址
bob = "Alice",此時bob指向的地址改變了,但是name依舊指向的是"BOB"這個物件的地址