Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di rex64
    Registrato dal
    Dec 2002
    Messaggi
    236

    [JAVA] istruzione FOR per confrotare strighe

    Salve a tutti!

    Dovrei usare un FOR per vedere le una stringa è vuota quindi ho fatto:

    if (stringa = "") {System.out.println ("vuota");}

    perchè non funziona? (anche se è vuota il messaggio non viene visualizzato.

    invece se faccio


    if (stringa != "") {System.out.println ("vuota");}

    Viene visualizzato in ogni caso.

    Come mai?

    Grazie a tutti!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Perchè gli oggetti di tipo String vanno trattati in modo differente: per confrontare due stringhe si usa il metodo equals():
    codice:
    if (stringa.equals("")) { System.out.println("la stringa è vuota"); }
    Quando usi un operatore di confronto con degli oggetti (<, >, ==, !=, ecc..) devi sapere che non fai riferimento a quello che gli oggetti rappresentano, ma alle loro locazioni in memoria, quindi l'oggetto stringa stà in una locazione di memoria diverso rispetto all'oggetto "" (aperte e chiuse virgolette). Per confrontare due oggetti, quindi, si usa sempre il metodo equals() (che è un metodo di Object, quindi di tutti gli ogetti). In alternativa, una classe, potrebbe fornire un metodo apposito per il confronto.


    Ma non vedo il ciclo for né vedo la sua utilità in questo... :master:


    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

  3. #3
    Tra l'altro (e marginalmente) non poteva comunque funzionare, neanche se usavi primitive al posto di oggetti, perché hai tentato un confronto con un operatore di assegnazione!

    Occhio che in Java = è un operatore di assegnazione, mentre == è un operatore di confronto. Es.:
    int a = 1;
    if (a == 1) {//codice}

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    fate delle prove...quand'è che si vede la differenza? :bubu:

    class p1 {
    public static void main(String arg[]) {
    String prova="ggd";
    if(prova == "ggd") System.out.println("uguale");
    else System.out.println("non uguale");


    if(prova.equals("ggd")) System.out.println("uguale");
    else System.out.println("non uguale");



    }
    }

    Luca

  5. #5
    Utente di HTML.it L'avatar di rex64
    Registrato dal
    Dec 2002
    Messaggi
    236
    Vi ringrazio tutti!

    Adesso ho capito!

    ps: ho sbagliato non volevo scrivere FOR ma IF

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    C'è l'inghippo: il test risulta effettivamente vero quando le stringhe le crei in quel modo (e io pensavo che, invece, non fosse verificato... ).

    Ma prova questo:
    codice:
    class p1 { 
       public static void main(String arg[]) { 
          String prova= new String("ggd"); 
          String prova2 = new String("ggd");
          if(prova == prova2) System.out.println("uguale"); 
          else System.out.println("non uguale"); 
       } 
    }
    Questo codice ti restituisce "non uguale", eppure le due stringhe rappresentano la stessa stringa. Ma sono due oggetti DIVERSI.

    Se invece le dichiari in modo esplicito: String a = "qualcosa"; allora è un'altra cosa. Dichiarate, invece, con la classica istanziazione tramite l'operatore new la cosa si vede.

    E questo si applica espressamente quando la stringa la ricevi da un metodo: non sai se chi ha progettato quella classe ti restituisce un oggetto String tramite l'operatore new o meno (di solito, non funziona così!)


    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

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    domanda: per il confronto oggetto1 == "costante" dovrebbe riuscire sempre? In ogni caso sono daccordo che non è bello, tanto però per capire come funzionano le cose...

    Luca

  8. #8
    Originariamente inviato da Lucked
    domanda: per il confronto oggetto1 == "costante" dovrebbe riuscire sempre? In ogni caso sono daccordo che non è bello, tanto però per capire come funzionano le cose...

    Luca
    No, riesce in condizioni aleatorie.
    Il fatto è che sono ca**i della classe di riferimento decidere se e quando "internare" gli oggetti.
    Vedere il metodo String.intern() per capire quel che voglio dire.

    E' possibile che gli oggetti mappino la stessa area di memoria, ma non bisogna far affidamento su quello.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.