Аргументы командной строки Java. Использование * в качестве аргумента для умножения

Я пытаюсь запустить приложение калькулятора java из командной строки. параметры следующие: оператор operand1 operand2. Я могу успешно запустить java-программу для + и -.
например
java calc + 2 4
java calc - 10 4

Но когда я пытаюсь запустить
java * 2 5

System.out.println(args[0]);
System.out.println(args[1]);
System.out.println(args[2]);

дает результат:
.classpath
.project
.settings

Я узнал по проб и ошибок, что использование одинарных кавычек ('*') решило мою проблему. У меня сейчас два вопроса.
1. Использует ли одинарные кавычки правильный способ сделать это? (java calc '*' 2 5)
2. В чем смысл * в командной строке java? (Я пытался найти это в Интернете, но не нашел большой помощи)

Спасибо, Punit

Ответ 1

Это не Java, это оболочка (cmd, если вы работаете в Windows), которую вы используете, которая интерпретирует * как "все файлы и папки в текущем каталоге".

Итак, когда вы пишете:

java calc * 2 5

Фактически вы передадите вашей программе следующие аргументы:

java calc file_1 file_2 ... file_n 2 5

Где file_1 ... file_n - все файлы (и папки) в текущем каталоге).

Если вы не хотите, чтобы ваша оболочка интерпретировала * как все файлы, которые вам нужны (как вы заметили), чтобы процитировать этот аргумент.

Ответ 2

Если вы укажете аргументы команды, оболочка не будет расширять их до имен файлов. '*' не имеет особого значения для java, это оболочка, обрабатывающая этот вход.