Что означает * в списке основных аргументов java?

Я написал такой класс и назвал его Solution.java.

public class Solution {
    public static void main(String[] args) {
        System.out.println(args.length);
    }
}

Если я запустил его в терминале, я получил такой результат:

>  /Users/WangWei  java Solution *
18
>  /Users/WangWei

Почему 18?

Ответ 1

Вероятно, количество файлов в вашем рабочем каталоге.

Результат * не относится к Java. Он специфичен для среды, в которой вы работаете, то есть рабочего каталога и типа оболочки (командная строка Windows, bash,...), которую вы используете для запуска команды java. Это связано с тем, что оболочка обрабатывает и оценивает командную строку перед запуском процесса. Он заменяет *.

Чтобы сохранить * в качестве аргумента командной строки, вам необходимо указать его:

java Solution '*'

Ответ 2

Ваша оболочка интерпретирует содержимое текущей папки - туда передается 18 файлов. Используйте одиночные цитаты, чтобы избежать интерпретации звездочки

java Solution '*'

Ответ 3

Просто добавьте это в свой код, и вы увидите:

for(String line: args)
  System.out.println(line);

Ответ 4

Количество файлов в вашем каталоге.

18 показывает, что в вашем каталоге есть 18 файлов.