Originariamente inviato da nourdine
Domanda teorica che forse spiega il mio problema: ma i parametri passati da linea di comando di che tipo sono? String, int??
Sono String, ovviamente. Ma la questione è che le stringhe "literal" nel sorgente vengono messe nel constant-pool mentre gli oggetti String degli argomenti sono istanziati a runtime. Quindi sono oggetti distinti dalle stringhe literal, con reference differenti (e == su basa solo sui reference, non sul contenuto degli oggetti!).

String a = "aaa";
String b = new String("aaa");

a == b è false;


Hai 2 soluzioni:

a) Usare equals() e non ==
b) "internare" la stringa dell'argomento:
String action = args[0].intern();

e quindi puoi usare ==, perché intern() fornisce il reference ad una stringa nel constant-pool (e se non è presente la inserisce nel pool).