Visualizzazione dei risultati da 1 a 10 su 19

Hybrid View

  1. #1
    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
    e quindi due oggetti di indirizzo persona, o sbaglio?
    Sbagli. Sono due stringhe (potrebbero arrivare anche da chissà dove). Il fatto che stai passando due nomi di due oggetti IndirizzoPersona non vuol dire che stai confrontando gli oggetti IndirizzoPersona in sé!


    Data una classe Persona:

    codice:
    public class Persona {
        private String nome;
        private String cognome;
    
        public Persona(String nome, String cognome) {
            this.nome = nome;
            this.cognome = cognome;
        }
    
        // ... metodi getNome/setNome/getCognome/setCognome omessi per brevità ...
    }

    Solo così, senza altro (e SENZA equals ridefinito) se fai:

    codice:
    Persona p1 = new Persona("Mario", "Rossi");
    Persona p2 = new Persona("Mario", "Rossi");
    
    System.out.println(p1.equals(p2));

    Stampa false. Cioè per equals i due oggetti NON sono uguali. Ma perché il equals è quello ereditato da Object che usa solo == e siccome sono oggetti DISTINTI, essi sono visti come diversi.

    Ma i due oggetti hanno lo stesso contenuto (stesso nome e cognome). Ripeto: == si basa solo sulla "identità" degli oggetti, NON sul loro contenuto.


    Se vuoi confrontare il contenuto, ridefinisci equals, in Persona si mette es.:

    codice:
    public class Persona {
        // ... come prima
    
        public boolean equals(Object altroOggetto) {
            if (altroOggetto instanceof Persona) {
                Persona altraPersona = (Persona) altroOggetto;
    
                return getNome().equals(altraPersona.getNome())
                    && getCognome().equals(altraPersona.getCognome());
            }
    
            return false;
        }
    }

    Adesso quel p1.equals(p2) dà true, il equals eseguito è quello scritto esplicitamente sopra nella classe, che confronta il contenuto di due oggetti Persona (il this e l'altro oggetto passato in argomento).
    Ultima modifica di andbin; 22-12-2016 a 16:26
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    110
    Scusami e come mai a me il metodo sonoUguali da risultato TRUE se i nomi sono uguali e FALSE se i nomi non sono uguali? Dovrebbe darmi sempre FALSE a questo punto, no?

  3. #3
    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 e come mai a me il metodo sonoUguali da risultato TRUE se i nomi sono uguali e FALSE se i nomi non sono uguali? Dovrebbe darmi sempre FALSE a questo punto, no?
    Il equals di String È ben definito e corretto per confrontare il contenuto ovvero la sequenza dei char. Quindi se le sequenze sono uguali .... sono UGUALI. Se sono diverse ... beh, ovviamente sono diverse!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.