考慮下面的類:class Collection { private Object[] terms; public Collection(Object... terms) { this.terms = terms; } // Do something with terms...}我試圖用這個類來保持不變性,并且我想更多地了解 varargs 及其功能。當我使用參數時:Collection c = new Collection(1, 2, 3, 4);我假設在上面的實例中創建了一個新數組。但是,如果我要執行類似以下代碼的操作:Object[] arr = {1, 2, 3, 4};Collection c = new Collection(arr);由于使用了可變參數,在上述實例中是否隱式創建了一個新數組,或者該數組只是通過引用傳遞,就像類型參數用于Object[]?
2 回答

手掌心
TA貢獻1942條經驗 獲得超3個贊
我會說不,因為以下原因。使用原始數組。不會創建新的。
public static void main(String[] args) {
int[] v = { 1, 2, 3, 4
};
System.out.println(System.identityHashCode(v));
test(v);
System.out.println(Arrays.toString(v));
}
public static void test(int... vals) {
System.out.println(System.identityHashCode(vals));
vals[2] = 1000;
}
打印出來
2085857771
2085857771
[1, 2, 1000, 4]

白豬掌柜的
TA貢獻1893條經驗 獲得超10個贊
當我解釋JLS時,如果您傳遞一個數組作為參數,則不會創建新數組。WJS 的示例還表明,在這種情況下它保持相同的數組,因為在 vararg 函數中所做的更改在執行后仍然可見。
添加回答
舉報
0/150
提交
取消