在下面的程序中,如果执行此操作(例如,通过命令行),args JVM是否独立保证不为null?
public class test {
public static void main(String[] args) {
}
}
答案 0 :(得分:13)
简短回答:是的,它的长度可能为0,但不会为空。
答案 1 :(得分:3)
我在 Java虚拟机规范的Loading, Linking, and Initializing部分找不到要求参数为非null的语句。
因此必须假设允许null
,并且,迂腐地,您的程序应该准备好处理null
个参数。即使在典型的运行时环境中,例如使用java
程序启动Java程序以在Linux上启动JVM,参数也永远不会是null
。
答案 2 :(得分:2)
MacOS上的双击应用程序包仍然有一个传递给main的非空数组,即使本身没有命令行。
JVM规范未指定main方法的数组参数是否为null。看到 https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-5.html#jvms-5.2
但是,惯例是它将是非null,并且JVM供应商不太可能在此时破坏该约定。