使用垃圾分配数组(堆垃圾值)

时间:2018-02-05 15:11:11

标签: java-9 unsafe

我在接受采访时得到了这个问题,即使听起来很愚蠢,我觉得这很有趣。那么,问题是,如何用堆垃圾初始化一个数组(不是zeroes的东西)。

例如,而不是:

int [] ints = new int[10];
System.out.println(Arrays.toString(ints));

最后一次打印将保证所有内容仅为zeroes

但是有没有这种方法可以使用零的潜在值来实例化此数组?

1 个答案:

答案 0 :(得分:3)

老实说,有两件事。

我不知道这个问题的确切意义,因为它需要对每天没有完成的Unsafe课程进行一些调查。可能是公司(我无论如何都没有通过面试),真的做了这个低级别的编程。

第二,我很幸运,我只是在看看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;
        }
    }

记录为:

  

分配给定类型的数组,但不进行归零。