[英]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();
上面的代碼將創建一個獨立於matrix
的copy
矩陣,這意味着您可以更改副本的值而不會影響原件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.