Visualizzazione dei risultati da 1 a 10 su 19

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    110
    Ora provo a fare un costruttore a quattro argomenti!
    Ma in che senso definire equals all'interno di IndirizzoPersona? Spostare il metodo già fatto la' dentro?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Sevenis Visualizza il messaggio
    Ma in che senso definire equals all'interno di IndirizzoPersona?
    Il equals() serve per stabilire se due oggetti sono di contenuto/significato "equivalente". Ridefinire il public boolean equals(Object) in una classe permette quindi di verificare in modo generalizzato se due oggetti di quella classe hanno contenuto/significato "equivalente". Se non si ridefinisce equals, resta quello "ereditato" da Object, che si basa SOLO sulla identità degli oggetti e NON sul loro contenuto. Chiaramente devi stabilire tu COSA confrontare cioè in che cosa due oggetti sono da ritenere "equivalenti".

    E detto in generale, se si ridefinisce equals() si dovrebbe anche ridefinire hashCode(), perché tra i due c'è un contratto ben preciso.
    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
    Registrato dal
    Aug 2016
    Messaggi
    110
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Il equals() serve per stabilire se due oggetti sono di contenuto/significato "equivalente". Ridefinire il public boolean equals(Object) in una classe permette quindi di verificare in modo generalizzato se due oggetti di quella classe hanno contenuto/significato "equivalente". Se non si ridefinisce equals, resta quello "ereditato" da Object, che si basa SOLO sulla identità degli oggetti e NON sul loro contenuto. Chiaramente devi stabilire tu COSA confrontare cioè in che cosa due oggetti sono da ritenere "equivalenti".

    E detto in generale, se si ridefinisce equals() si dovrebbe anche ridefinire hashCode(), perché tra i due c'è un contratto ben preciso.
    Perdonami, non ho capito la differenza... entrambi, in questo caso, non controllano che i "nome" di entrambe le istanze coincidano? Non ho capito la differenza tra identità e contenuto...

    hashCode() non l'ho ancora studiato... vado a vedere!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Sevenis Visualizza il messaggio
    Perdonami, non ho capito la differenza... entrambi, in questo caso, non controllano che i "nome" di entrambe le istanze coincidano? Non ho capito la differenza tra identità e contenuto...
    Se ridefinisci equals in una tua classe es. in IndirizzoPersona, sei tu che puoi (e devi) stabilire COSA confrontare per indicare se due oggetti sono "equivalenti". Solo nome e cognome? Anche email? Anche telefono?
    Quando per te due oggetti IndirizzoPersona sono in pratica "uguali"?


    Riguardo la identità vs contenuto, la identità si riferisce alla uguaglianza di reference.

    Integer a = new Integer(123);
    Integer b = new Integer(123);
    Integer c = a;


    a == b dà false. Hanno lo stesso contenuto (valore 123) ma sono due oggetti DISTINTI, il reference non è uguale. Hanno identità differenti.

    a == c dà true perché le due variabili hanno lo stesso reference (l'oggetto è uno solo, che lo "vedi" da a o da c).


    Quote Originariamente inviata da Sevenis Visualizza il messaggio
    hashCode() non l'ho ancora studiato... vado a vedere!
    Potresti "sorvolare" su quest'aspetto. hashCode() si usa principalmente nelle collezioni basate su hash-table.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    110
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Se ridefinisci equals in una tua classe es. in IndirizzoPersona, sei tu che puoi (e devi) stabilire COSA confrontare per indicare se due oggetti sono "equivalenti". Solo nome e cognome? Anche email? Anche telefono?
    Quando per te due oggetti IndirizzoPersona sono in pratica "uguali"?


    Riguardo la identità vs contenuto, la identità si riferisce alla uguaglianza di reference.

    Integer a = new Integer(123);
    Integer b = new Integer(123);
    Integer c = a;


    a == b dà false. Hanno lo stesso contenuto (valore 123) ma sono due oggetti DISTINTI, il reference non è uguale. Hanno identità differenti.

    a == c dà true perché le due variabili hanno lo stesso reference (l'oggetto è uno solo, che lo "vedi" da a o da c).



    Potresti "sorvolare" su quest'aspetto. hashCode() si usa principalmente nelle collezioni basate su hash-table.
    scusami ma non è esattamente quello che ho fatto io creando il mio metodo sonoUguali?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Sevenis Visualizza il messaggio
    scusami ma non è esattamente quello che ho fatto io creando il mio metodo sonoUguali?
    Il sonoUguali che avevi scritto inizialmente riceve due stringhe (che potrebbero essere qualunque). NON confronta due oggetti IndirizzoPersona.


    Ti ribadisco che un conto è usare l'operatore == che con i tipi reference si basa SOLO sulla identità degli oggetti e NON sul loro contenuto.
    E un altro conto è usare/sfruttare equals(). Il equals implementato in Object si basa solo su == (non saprebbe che altro fare). Se in una tua classe ridefinisci equals, allora puoi cambiare il senso di equals per fare una comparazione sul contenuto degli oggetti.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    110
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Il sonoUguali che avevi scritto inizialmente riceve due stringhe (che potrebbero essere qualunque). NON confronta due oggetti IndirizzoPersona.


    Ti ribadisco che un conto è usare l'operatore == che con i tipi reference si basa SOLO sulla identità degli oggetti e NON sul loro contenuto.
    E un altro conto è usare/sfruttare equals(). Il equals implementato in Object si basa solo su == (non saprebbe che altro fare). Se in una tua classe ridefinisci equals, allora puoi cambiare il senso di equals per fare una comparazione sul contenuto degli oggetti.
    Boh...davvero non sto capendo. Mi spiegheresti come definire un equals diverso da quello in Object che faccia altro rispetto a quello che fa ora?

    Nello specifico:

    codice:
    public static void sonoUguali (String s1, String s2){
            boolean check = s1.equals(s2);
                if (check)
                {
                    System.out.println("Sono uguali!");
                }
                else
                {
                    System.out.println("NON sono uguali!");
                }
            }
    si sono due stringhe generiche s1 e s2 ma poi nella chiamata del metodo uso:

    codice:
    sonoUguali(mariorossi.getNome(), rossimario.getNome());
    e quindi due oggetti di indirizzo persona, o sbaglio?

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