Args保证不为空?

在以下程序中,如果执行此操作(例如,通过命令行),args JVM是否独立保证不为空?

public class test { public static void main(String[] args) { } } 

简短回答:是的,它的长度可能为0,但不会为空。

MacOS上的双击应用程序包仍然有一个非空数组传递给main,即使本身没有命令行。

JVM规范未指定main方法的数组参数是否可以为null。 请参阅https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-5.html#jvms-5.2

但是,约定是它将是非null,并且JVM供应商此时不太可能破坏该约定。

我在Java虚拟机规范的“ 加载,链接和初始化”部分中找不到任何声明,该部分要求参数为非null。

因此必须假设允许null ,并且,迂腐地,您的程序应该准备好处理null参数。 即使在典型的运行时环境中,例如使用java程序启动java程序以在Linux上启动JVM,也不会出现参数为null