Sono un novizio in Java. Ora sto studiando equals e == e ridefinizione di equals e toString.Come stampare l'indirizzo di un oggetto se si è ridefinito il metodo toString
Vorrei utilizzare sia il metodo toString che ho ridefinito sia il metodo predefinito ereditato dalla classe Object.
Non sono riuscito a utilizzare quel super modificatore per raggiungere tale metodo.
Questo è solo per scopi didattici. Quello che mi piacerebbe ottenere è più chiaro se si guarderanno i commenti nel mio codice.
Potresti aiutarmi qui?
Il mio codice è:
public class EqualTest{
public static void main(String[] args){
Employee alice1 = new Employee("Alice Adams", 75000, 1987, 12, 15);
//System.out.super.println(alice1);
Employee alice2 = alice1;
//System.out.super.println(alice2);
Employee alice3 = new Employee("Alice Adams", 75000, 1987, 12, 15);
//System.out.super.println(alice3);
System.out.println("alice1==alice2: " + (alice1==alice2));
System.out.println("alice1 == alice3: " + (alice1==alice3));
System.out.println("alice1.equals(alice3): " + alice1.equals(alice3));
}
}
class Employee{
...
public String toString(){
return getClass().getName() + "[name = " + name +
", salary=" + salary + ", hireDay=" + hireDay + "]";
}
}
In primo luogo non si chiama ridefinizione è chiamato overriding –
Ma l'implementazione di default non restituisce l'indirizzo dell'oggetto. Restituisce il nome della classe e il codice hash di quell'oggetto. Dalla documentazione di java.lang.Object: 'getClass(). GetName() +' @ '+ Integer.toHexString (hashCode())' – Matthias
Bene, sì. Ma il codice hash è l'indirizzo. Guarda la documentazione di Object hashCode: questo viene in genere implementato convertendo l'indirizzo interno dell'oggetto in un numero intero, ma questa tecnica di implementazione non è richiesta dal linguaggio di programmazione JavaTM. Quindi, il codice hash è lo stesso numero esadecimale che rappresenta l'indirizzo. Ma è stato convertito in decimale. – Kifsif