簡體   English   中英

如何在Java中按值傳遞二維數組?

[英]How to pass a two dimensional array by value in Java?

我的數組是這樣的:

int[][] arr = new int[3][4];

我想消除函數中數組發生的更改。 如何通過值將其傳遞給函數?

謝謝。

您不能按值傳遞數組。

保持原始數組不變的唯一方法是將數組的副本傳遞給您的方法。 請注意,對於多維數組,您不能使用Arrays.copyOf來創建該副本,因為它執行淺表復制,因此不會復制內部數組(將復制其引用)。

public static int[][] cloneArray(int[][] src) {
    int length = src.length;
    int[][] target = new int[length][src[0].length];
    for (int i = 0; i < length; i++) {
        System.arraycopy(src[i], 0, target[i], 0, src[i].length);
    }
    return target;
}

在Java中,無法按值傳遞數組(或任何Object )。 Object的引用按值傳遞,從而使該方法稱為對對象內部數據的完全訪問。

為了解決此問題,請執行以下任一操作:

  • 停止對方法內部的原始數組進行更改。 而是明確地制作一個副本,然后對其進行處理。
  • 上面的方法很脆弱,因為Java並不強制執行“不變”的要求。 另一種方法是將數組封裝在不可變的類中,然后讓該類處理數組的副本。
  • 最后,您可以創建一個類,為您提供一個完全封裝的數組,並實現寫時復制策略。 這種方法使您可以在需要時進行復印,從而有可能提高性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM