考虑下面的类: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
提交
取消