Merkwürdige Ausgabe eines Consolen-Programms

Hi, ich habe in alten Code-Beständen ein kleines Programm gefunden, das für mich nicht erklärbare Ausgaben erzeugt.

Der Code:

public class CommandCalc {
   public static void main(String[] args) {
      System.out.println(java.util.Arrays.toString(args)); //Ausgabe zur Fehleranalyse

      if(args.length == 3) {
         if(checkOperands(args)) {
            if("+".equals(args[1])) {
               System.out.println(addition(parse(args[0]), parse(args[2])));
            } else if("-".equals(args[1])) {
               System.out.println(subtraction(parse(args[0]), parse(args[2])));
            } else if("*".equals(args[1])) {
               System.out.println(multiplication(parse(args[0]), parse(args[2])));
            } else if("/".equals(args[1])) {
               System.out.println(division(parse(args[0]), parse(args[2])));
            } else {
               System.out.println("Unzulässiger Operator!");
            }
         }
      } else {
         System.out.println("CommandCalc Verwendungsbeispiel:\nCommandCalc 5 + 8");
      }
   }

   private static boolean checkOperands(String[] args) {
      return args[0].matches("\\d+") && args[2].matches("\\d+");
   }

   private static double parse(String arg) {
      return Double.parseDouble(arg);
   }

   private static double addition(double arg1, double arg2) {
      return arg1 + arg2;
   }

   private  static double subtraction(double arg1, double arg2) {
      return arg1 - arg2;
   }

   private static double multiplication(double arg1, double arg2) {
      return arg1 * arg2;
   }

   private static double division(double arg1, double arg2) {
      return arg1 / arg2;
   }
}

Das Programm macht zum Teil, was es soll. Aber wenn ich eine Multiplikation durchführen möchte, sieht die Ausgabe folgendermaßen aus:

java CommandCalc 5 * 6
[5, CommandCalc.class, CommandCalc.java, 6]
CommandCalc Verwendungsbeispiel:
CommandCalc 5 + 8

Warum werden bei Verwendung des Sterns 4 Argumente eingelesen? Wo ist das Sternchen hin? Warum werden die Dateien des Verzeichnisses, aus dem das Programm gestartet wurde, als Argumente eingesetzt? Wie kann man das Problem lösen?

Also wenn ich hier in der Konsole (Mac) ein "echo * " mache, zeigt er auch die Dateien an. Mache ich aber "echo " * " " dann zeigt der den * an. Also eventuell die Argumente in “” setzen zumindestens den Operanden?

In den meisten Konsolen ist der Stern ein Wildcard für Irgendwas… Nimm einfach ein “x”. Und für den Slash gilt teilweise Ähnliches (z.B. Root unter Unix-Derivaten). Da wird es schon schwieriger: Der Doppelpunkt dient teilweise zur Pfadseparation, also bliebe nur noch das Obelus-Symbol für die Division. Frag mich aber nicht, wie man dies über Tastatur eingibt.

Andererseits… + und - haben sicher auch irgendwelche Funktionen… Übergib die Aufgabe halt komplett als String. XD

Ich hatte neulich auch gerätselt, warum mein Programm mit globs nicht so umgeht, wie ich es erwarte. Am Ende lag es, wie Spacerat schon bemerkte, an der Glob-Autocompletion meiner Shell.

Danke euch. Bin nun im Bilde.