Args гарантированно не равны нулю? - PullRequest
18 голосов
/ 07 марта 2012

В следующей программе, если она выполняется (например, через командную строку), независимо гарантируется, что args JVM не будет нулевым?

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

Ответы [ 3 ]

13 голосов
/ 07 марта 2012

Краткий ответ: да, он может иметь длину 0, но не будет нулевым.

3 голосов
/ 31 января 2018

Я не могу найти оператор в Загрузка, связывание и инициализация Спецификация виртуальной машины Java , которая требует, чтобы аргументы были ненулевыми.

Таким образом, следует предположить, что null разрешено, и, педантично, ваша программа должна быть готова к обработке null аргументов. Даже если в типичных средах выполнения, таких как запуск Java-программы с использованием программы java для запуска JVM в Linux, аргументами null.

никогда не будет.
2 голосов
/ 31 января 2018

Дважды кликабельные наборы приложений в MacOS по-прежнему имеют ненулевой массив, переданный в main, даже если в нем нет командной строки как таковой.

В спецификации JVM не указан параметр массиваОсновной метод может быть нулевым.См. https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-5.html#jvms-5.2

Однако, соглашение состоит в том, что оно будет ненулевым, и маловероятно, что поставщик JVM нарушит это соглашение в этот момент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...