在下面的示例代碼中,如何更改實例字段var1
而不改變構造函數initialVal1
(var2
)? - 我應該使用Arrays.copyOf
進行復制嗎?Java:更改實例字段
public class Test
{
private int[] var1;
private int[] var2;
public Test(int[] initialVal1)
{
var1 = initialVal1;
var2 = initialVal1;
}
private void int mutateVar1()
{
this.var1[0] = 100; // change the value at index 0 to 100 in var1 array, this also changes initialVal[0], right?
}
private int getSumOfInitial()
{
int sum = 0;
for (int i = 0; i < var2.length; i++) // but at this point, the initialVal[0] has also been mutated to 100.
{
sum += var2[i]
}
return sum;
}
}
是的,你必須做一個數組拷貝..或者在這種情況下你可以'克隆' – nachokk
由於initialVal1不在方法的範圍內,所以'getSumOfInitial'方法不會被編譯。 'initialVal1'是傳遞給構造函數的參數,一旦構造函數執行,將超出範圍 –
您可以克隆或深度複製集合(數組)。 –