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
。