一. 介紹
值傳遞:值傳遞(Pass-by-Value)當我們向方法傳遞引數時,實際上是將該引數的值進行拷貝,并將拷貝后的值傳遞給方法內部,在方法內部對引數進行修改不會影響原始變數的值,
參考傳遞:參考傳遞(Pass by reference)是指方法呼叫時實參(即傳入方法的引數)是一個物件的參考,而不是物件本身,當一個物件的參考被傳遞給一個方法時,方法內部對該參考的操作會影響到原始物件,
public static void main(String[] args) { int value = https://www.cnblogs.com/victor-sin/archive/2023/07/11/10; StringBuilder reference = new StringBuilder("Hello"); // 值傳遞 changeValue(value); System.out.println("Value after method call: " + value); // 參考傳遞 changeReference(reference); System.out.println("Reference after method call: " + reference); } public static void changeValue(int number) { number = 20; } public static void changeReference(StringBuilder str) { str.append(" World"); } // 輸出結果: Value after method call: 10 Reference after method call: Hello World
二. 執行程序:
值傳遞:
- 首先,在呼叫方法時,將實際引數的值復制一份,并將這份副本傳遞給方法進行操作,
- 在方法內部,這個副本的值被賦給一個新的區域變數,
- 在方法執行程序中,對該區域變數的任何改動都不會影響原始的變數,因為它們指向的是不同的記憶體空間,
- 當方法執行完畢后,這個區域變數和方法的堆疊幀都會被銷毀,而原始的變數的值保持不變,
基本資料型別的傳遞程序中,傳入的值被復制到方法內部,并在方法內部進行操作,但不會影響原始變數的值,
參考傳遞:
- 創建一個物件并將其參考賦值給一個變數,
- 將這個變數作為引數傳遞給一個方法,
- 在方法內部,引數變數接收到了對原始物件的參考,
- 在方法內部修改引數變數所指向的物件時,原始物件也會受到影響,
- 方法執行完畢后,回傳到原始呼叫處,可以通過原始變數訪問到被修改后的物件,
物件的參考傳遞意味著傳遞的是物件的參考,通過參考可以訪問和修改原始物件的屬性,
三. 擴展
參考型別傳遞:
public class User { private String name; private int age; // 略:構造方法、getter、setter、toString() 等 } public class Main { public static void main(String[] args) { // 創建一個物體物件, 存盤在堆記憶體中, User user = new User("小明", 18); System.out.println(method(user)); System.out.println(user); } //創建一個method(),將物體引數傳入 public static User method(User user) { user.setName("小美"); user.setAge(20); return user; } } 輸出結果: User{name='小美', age=20} User{name='小美', age=20}
① 在堆疊中分配記憶體空間,創建一個名為 "user" 的參考變數;
② 在堆中分配記憶體空間,創建一個 User 類的實體物件,并將其地址賦值給 "user" 參考變數,
③ 呼叫 User 類的構造方法,傳入引數 "小明" 和 18,初始化實體物件的屬性值,
④ method() 方法進堆疊,并傳遞user變數的參考地址值作為引數,
⑤ 進入方法體中,執行setter 方法,改變user變數中的屬性值,user.setName("小美"); user.setAge(20);并return user; 此時已經改變了參考地址值內的屬性;
⑥ 列印輸出結果,

完
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/557019.html
標籤:其他
上一篇:2022藍橋杯B組(java)版
下一篇:返回列表
