gpt4 book ai didi

java - 使用 varargs 时是否会创建一个新数组?

转载 作者:行者123 更新时间:2023-12-01 19:35:27 24 4
gpt4 key购买 nike

考虑下面的类:

class Collection {

private Object[] terms;
public Collection(Object... terms) {
this.terms = terms;
}

// Do something with terms...
}

我正在尝试保持此类的不变性,并且我想了解更多有关可变参数及其功能的信息。当我使用参数时:

Collection c = new Collection(1, 2, 3, 4);

我假设在上面的实例中创建了一个新数组。但是,如果我要执行类似以下代码的操作:

Object[] arr = {1, 2, 3, 4};
Collection c = new Collection(arr);

由于使用可变参数,是否在上述实例中隐式创建了一个新数组,或者该数组只是通过引用传递,就像类型参数用于 Object[] 一样?

最佳答案

我会因为以下原因拒绝。使用原始数组。不会创建新的。

   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]


关于java - 使用 varargs 时是否会创建一个新数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57862870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com