Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130

    parametri programma da linea di comando

    ciao

    ho questo stupido programmino per liena di comando:

    codice:
    class Rubrica {
    	public static void main(String[] args){
    		String action = args[0];
    		// System.out.println(action);		
    		if (action == "del") {
    			System.out.println("del");
    		}
    		else if (action == "ins") {
    			System.out.println("ins");
    		}
    		else if (action == "list") {
    			System.out.println("list");
    		}
    		else {
    			System.out.println("error!");		
    		}		
    	}
    }
    in realta' non funziona come mi aspetto. L'ho compilato e poi eseguito cosi:

    codice:
    java Rubrica del
    invce di satmpare "del" mi satmpa "error!" come se non riuscisse a valutare la verita' di

    action == "del"

    Domanda teorica che forse spiega il mio problema: ma i parametri passati da linea di comando di che tipo sono? String, int??

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: parametri programma da linea di comando

    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).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    interessante ...

    grazie

  4. #4
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    pero' ho scoperto che:

    String x = "ciao";

    if (x = "ciao") {
    System.out.print("uguali") // stampa uguali
    }


    il che non dovrebbe accadere se (come dici tu) java valuta basandosi sui reference quando si usa l'operatore ==

    che mi dici?

    grazie

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Dico che non hai capito bene quello che ti ha detto andbin.

    Se fai l'assegnazione di x in quel modo è ovvio che il test funzioni. Non hai utilizzato l'operatore new per creare un nuovo oggetto, ma hai assegnato ad un puntatore il riferimento ad una stringa literal... che ovviamente la JVM trova nel constant-pool.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    [PIGNOLO ON]
    if (x == "ciao")
    System.out.print("uguali");
    [PIGNOLO OFF]

  7. #7
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    ooooooooooooops ... sorry. il codice "giusto" e':

    codice:
    String str = new  String("ciao");
    if (str == "ciao") {
    	System.out.print("uguali");
    }
    else {
    	System.out.print("false");
    }
    scusate. Adesso e' chairo.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.