0

是否有一个善良的灵魂真正知道 Java 的省略号实现是否涉及幕后的任何堆分配。对我来说,调用方法在堆栈上做必要的事情并完全避免数组/堆分配对我来说似乎是合理的,但是当涉及到 Java 时,我被证明是错误的次数比我想象的要多。如果有人真的知道,我将不胜感激。

4

1 回答 1

2

是的,它确实是在创建一个数组。现在有可能在某些情况下 JVM 可以做一些聪明的事情来注意到数组实际上永远不会“转义”,并且它实际上可以在堆栈上创建 - 但这与 varargs 语法无关,它只是语法糖。

通常,您应该将其视为任何其他数组创建。所以这:

public void foo(int... args)
// Code
foo(1, 2, 3);

完全等同于:

public void foo(int[] args)
// Code
foo(new int[] { 1, 2, 3 });
于 2013-08-12T19:25:11.930 回答