簡體   English   中英

Java int [] []數組對象

[英]Java int[][] array object

我已經定義了一個int[][]對象。 因為它是一個對象,所以如果我將它作為參數發送給方法,它將僅發送其引用,因此對方法中數組的任何更改都會在主程序中對其產生影響。 因此,我想在方法內部對此對象進行克隆,但是我不確定如何完成此操作。

我在想這樣的事情:

private void myMethod( int[][] array )
{
    //Define our temporary array (clone)
    int[][] newArray = new int[3][3];

    //Go through the elements of the array
    for .... row = 0; row < ..; row++
        for ..... col = 0; col < ..; col++
           //Copy individual elements from one array to another
           newArray[row][col] = array[row][col];
}

但是上面的代碼將每個元素從數組復制到newArray作為值(所以...該項目的克隆),還是只是引用?

如果是這樣,這怎么能完成。 如果我要使用ArrayLists而不是int[][]對象,則可以使用clone()方法或類似的方法,但是我沒有用於int[][]對象的方法:(

另外,如果我沒弄錯,如果我在newArray = array方法中執行此操作,那將再次復制僅引用,因此兩者都將指向相同的int[][]對象:(

附言:我知道我可以測試一下,但是我想和你們討論一下,看看到底是什么。

但是上面的代碼將每個元素從數組復制到newArray作為值(所以...該項目的克隆),還是只是引用?

你復制陣列中的每個元素 ,每個元素是一個int ,那么你的罰款。 新陣列將完全獨立於原始陣列。

請注意,如果您改為執行以下操作:

int[][] newArray = new int[3][];
for (int i = 0; i < 3; i++) {
    newArray[i] = array[i];
}

...那么將只是將對三個現有int[]數組的引用復制到newArray 但是您已經分配了一組全新的數組(一個int[][]和3x int[] ),因此它們都是獨立的。

原始類型(例如int )不是引用類型。 因此,遍歷所有項目並逐個復制它們將形成按值復制。

簡而言之,您的代碼是正確的。

int是原始類型,您總是將它們作為值而不是作為引用傳遞,因此您的代碼確實會創建該數組的新副本。

您可能要考慮使用Arrays.copyOf(),它可能會更快。

您可以在矩陣上以及與矩陣中的一行相對應的每個數組上使用clone() ,它將正常工作,因為您正在克隆基本值矩陣,如下所示:

int[][] matrix = new int[3][3];
// ... matrix gets filled ...
int[][] copy = matrix.clone();
for (int i = 0; i < matrix.length; i++)
    copy[i] = matrix[i].clone();

上面的代碼將創建一個獨立於matrixcopy矩陣,這意味着您可以更改副本的值而不會影響原件。

暫無
暫無

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

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