Java 中數組是按值傳遞還是按引用傳遞?
Java 與其他程式語言的不同之處在於其物件處理方法。與整數或字元等基本類型不同,Java 中的陣列具有獨特的行為。要理解它們的行為,區分按值傳遞物件和按引用傳遞物件至關重要。
Java 中以值或引用傳遞
在 Java 中,一切按值傳遞。但是,當傳遞數組時,情況會更加微妙。數組不是基元,但它們也不是傳統意義上的物件。相反,它們本質上是對堆上物件的引用。
當將陣列傳遞給方法時,對陣列的引用是按值傳遞的。這意味著傳遞的是引用的副本,而不是實際的陣列本身。
數組行為的影響
由於對數組的引用是按值傳遞的,透過該引用對數組內容所做的任何更改都會影響原始數組。例如,如果在方法中修改數組元素的值,則變更將反映在原始數組中。
但是,將引用本身更改為指向不同的數組不會更改原始數組中的原始引用方法。換句話說,傳遞給該方法的參考保持不變,即使它指向的陣列發生了更改。
清晰程式碼範例
來說明這個概念,請考慮以下程式碼:
public static void changeContent(int[] arr) { // If we change the content of arr. arr[0] = 10; // Will change the content of array in main() } public static void changeRef(int[] arr) { // If we change the reference arr = new int[2]; // Will not change the array in main() arr[0] = 15; } public static void main(String[] args) { int[] arr = new int[2]; arr[0] = 4; arr[1] = 5; changeContent(arr); System.out.println(arr[0]); // Will print 10.. changeRef(arr); System.out.println(arr[0]); // Will still print 10.. // Change the reference doesn't reflect change here.. }
在此範例中,changeContent 方法透過將第一個元素設定為來修改數組的內容10. 更改反映在main 中的原始數組中。這說明修改透過引用傳遞的陣列的內容會影響原始陣列。
另一方面,changeRef 方法將一個新數組分配給引用 arr。此變更不會反映在 main 中的原始數組中,因為引用本身不是按值傳遞的。
以上是Java 中的陣列是按值傳遞還是按引用傳遞?的詳細內容。更多資訊請關注PHP中文網其他相關文章!