在 Java 中,为什么这样
int n = 100000;
int[] array = new int[n + n / 2];
int[] arrayzip = new int[n];
System.arraycopy(array, 0, arrayzip, 0, n);
hashmap.put(x, arrayzip);
和这个
int n = 100000;
int[] array = new int[n + n / 2];
hashmap.put(x, new int[n]);
System.arraycopy(array, 0, hashmap.get(x), 0, n);
占用相同数量的内存?在第一个代码示例中,创建了一个额外的数组。
[编辑]好的,现在是第二个问题:
for (int i = 0; i < 100; i++) {
int n = 100000;
int[] array = new int[n + n / 2];
int[] arrayzip = new int[n];
System.arraycopy(array, 0, arrayzip, 0, n);
hashmap.put(x, arrayzip);
}
如果我们将任何代码示例放入循环中,然后arrayzip
创建100
时间,然后100
由于在循环中的作用域而所有引用都消失了,该怎么办。啊,现在我明白了,所以对象new int[]
是在堆上创建的,但它们不会丢失(垃圾收集),因为它们将引用存储在范围外的 objecthashmap
中。酷,我明白了!