Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
是否有一个善良的灵魂真正知道 Java 的省略号实现是否涉及幕后的任何堆分配。对我来说,调用方法在堆栈上做必要的事情并完全避免数组/堆分配对我来说似乎是合理的,但是当涉及到 Java 时,我被证明是错误的次数比我想象的要多。如果有人真的知道,我将不胜感激。
是的,它确实是在创建一个数组。现在有可能在某些情况下 JVM 可以做一些聪明的事情来注意到数组实际上永远不会“转义”,并且它实际上可以在堆栈上创建 - 但这与 varargs 语法无关,它只是语法糖。
通常,您应该将其视为任何其他数组创建。所以这:
public void foo(int... args) // Code foo(1, 2, 3);
完全等同于:
public void foo(int[] args) // Code foo(new int[] { 1, 2, 3 });