Args保证不为空?

时间:2012-03-07 16:38:04

标签: java jvm

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

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

3 个答案:

答案 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供应商不太可能在此时破坏该约定。