分配一个带有垃圾的数组(堆垃圾值)
Allocate an array with garbage (heap garbage values)
我在面试时遇到了这个问题,虽然听起来很愚蠢,但我觉得它很有趣。所以,问题是,如何使用堆垃圾(不仅仅是 zeroes
的东西)初始化数组。
例如相对于:
int [] ints = new int[10];
System.out.println(Arrays.toString(ints));
最后打印将保证一切都是zeroes
。
但是有没有一种方法可以用 不是 零的潜在值来实例化这个数组?
说实话,有两点。
我不知道这个问题的确切要点,因为它需要对 Unsafe
class 进行一些并非每天都在做的调查。可能是公司(反正我没通过面试),真的 做这个底层编程。
其次,我很幸运,我是在查看 String concat 是如何完成的时才发现这一点的,我第一次看到它并被它所吸引。
jdk.internal.misc.Unsafe unsafe = getUnsafe();
for (;;) {
int[] arr = (int[]) unsafe.allocateUninitializedArray(int.class, 10);
int sum = Arrays.stream(arr).sum();
if (sum != 0) {
System.out.println(Arrays.toString(arr));
break;
}
}
这被记录为:
Allocates an array of a given type, but does not do zeroing.