Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    java:operatore di uguaglianza== e stringhe

    Sul manuale ho letto che (nel caso di stringhe, penso + in generale di oggetti) l'operatore di uguaglianza == non serve a testare l'uguaglianza di contenuto ma solo l'uguaglianza di riferimento.
    Per provare questa cosa ho creato il mio programmino
    class Ciao{

    public static void main(String argv[]){

    String s1;
    String s2;
    s1="q";
    s2="q";

    if(s1==s2)
    System.out.print ("Ciao");



    }

    }

    che pero' mi stampa a schermo "ciao".
    Eppure s1 e s2 puntano a 2 distinti oggetti stringa.
    Ho sbagliato io a capire oppure cosaltro?

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,798
    L'oggetto stringa puntato è lo stesso.
    prova con:
    codice:
    String s1 = new String("q");
    String s2 = new String("q");
    System.out.println("s1 ed s2 " + ((s1 == s2) ? " " : " non ") +
      "puntano allo stesso oggetto.");
    Slack? Smack!

  3. #3
    ok grazie hai ragione
    a sto punto mi viene in mente un'altra domanda
    scrivere

    String s1 = new String("q");
    non è equivalente a
    String s1 = "q";
    ???(come ho letto sempre sul libro)

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,798
    Non proprio, perchè l'operatore new rilascia un puntatore
    ad una particolare zona di memoria.
    Anche se in java vengono quanto meno mascherati i puntatori.
    Slack? Smack!

  5. #5
    Ah ok ci sono +o-(la frase "Anche se in java vengono quanto meno mascherati i puntatori" mi è poco chiara ma ho appena iniziato a vedere java ).

    Ma quindi con
    String s1 = "q";
    crei un oggetto stringa che si comporta in maniera unpo' diverso da come appunto si dovrebbe comportare un oggetto stringa in java, no?(se nonne puoi+ mandami pure al diavolo eh)

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,798
    String s1 = "q"; // ad s1 assegna un letterale stringa, una costante in pratica
    String s2 = new String("q"); // ad s2 assegno un nuovo oggetto stringa
    Slack? Smack!

  7. #7
    ma con
    String s1 = "q";
    non creo un oggetto stringa?
    fatico a capire la differenza tra i 2 tipi di stringa creati con

    1)String s1 = new String("q");

    2)String s1 = "q";

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,798
    s1 è un oggetto stringa il cui valore è il letterale "q".

    Un altro esempio:
    codice:
    String s1 = "q";
    String s2 = "q";
    System.out.println("s1 == s2 --> " + (s1 == s2 ? "true" : "false"));
    System.out.println("s1.equals(s2) --> " + (s1.equals(s2) ? "true" : "false"));
    String s3 = new String ("q");
    String s4 = new String ("q");
    System.out.println("s3 == s4 --> " + (s3 == s4 ? "true" : "false"));
    System.out.println("s3.equals(s4) --> " + (s3.equals(s4) ? "true" : "false"));
    
    Ti è più chiaro?
    
    s1_____                 s3-------> "q"
           \"q"        
    s2_____/                s4-------> "q"
    s1 ed s2 fanno riferimento alla stessa area di memoria
    il cui valore è il letterale stringa "q"

    s3 ed s4 invece fanno riferimento a due diversi oggetti
    stringa, in quanto ciascun oggetto ha una propria zona
    di memoria.

    Spero di non complicarti le cose.

    Ciao.
    Slack? Smack!

  9. #9
    Vediamo se ci sono(anche se ovviamente mi esprimo con termini poco adatti): con new viene rilasciato un puntatore ad una particolare zona di memoria per cui confrontando le 2 stringhe
    String s1 = new String("q");
    String s2 = new String("q");
    con l'operatore di uguaglianza ==(che in questo caso confronta l'uguaglianza di riferimento) non si avrà mai un'uguaglianza perke' le zone di memoria a cui puntano le 2 stringhe sono diverse.
    Per verificare l'uguaglianza dei contenuti delle 2 zone bisognera' usare equals,

    Senza new invece tale puntatore non viene rilasciato per cui le stringhe create si comportano unpo' come delle variabili(so che quà magari lho sparata un po' grossa ma intendo in questo caso)che messe a confronto con == (che in questo caso confronta l'uguaglianza di contenuto), se hanno contenuto uguale, danno True altrimenti False.

    Unaltra cosa,hai detto "s1 ed s2 fanno riferimento alla stessa area di memoria "; ecco ma questo avviene solo perke' entrambi hanno come valore "q" altrimenti l'area di memoria sarebbe diversa vero?
    Si comporterebbero cosi(cioè occuperebbero la stessa aria di memoria) anche se fossero 2 semplici variabili e non 2 stringhe?


    Sperem!

  10. #10
    fose ho sbagliato
    l'operatore == confronta sempre l'uguaglianza di riferimento ma solo nel caso si sia usato New trova 2 riferimenti diversi

    boh

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.