Object ist eine von Java standardmäßig bereitgestellte Klasse. Mit Ausnahme der Object-Klasse verfügen alle Klassen in Java über Vererbungsbeziehungen. Standardmäßig erbt es die übergeordnete Klasse Object. Das heißt, Objekte aller Klassen können über die Referenz von Object empfangen werden.
Beispiel: Verwenden Sie Object, um Objekte aller Klassen zu empfangen
class Person{} class Student{} public class Test { public static void main(String[] args) { function(new Person()); function(new Student()); } public static void function(Object obj) { System.out.println(obj); } } //执行结果: Person@1b6d3586 Student@4554617c
Während der Entwicklung ist die Object-Klasse also der höchste einheitliche Parametertyp. Die Object-Klasse verfügt aber auch über einige klar definierte Methoden. Wie folgt:
Hier sind drei der Methoden: toString()-Methode, equal()-Methode, hashcode()-Methode
Wenn wir den Inhalt drucken möchten des Objekts, was durch Überschreiben der toString-Methode in der Object-Klasse erreicht werden kann!
Im Folgenden wird erläutert, warum die toString()-Methode überschrieben werden sollte.
Der folgende Code möchte ein Person-Objekt drucken: println-Methodenquellcode hier. Im Quellcode wird die valueOf-Methode in der String-Klasse aufgerufen. Wenn Sie zum Quellcode bei valueOf springen, können Sie feststellen, dass die toString-Methode tatsächlich im Methodenkörper aufgerufen wird Schauen wir uns zu diesem Zeitpunkt die spezifische Implementierung von toString an.
getClass().getName() gibt die Laufzeitklasse (Class) dieses Objekts und den Namen der Entität (Klasse, Schnittstelle, Array-Klasse) zurück , Basistyp oder void), dargestellt durch dieses Klassenobjekt in Form eines Strings
hashCode()-Methode gibt die „Adresse“ zurück
Integer.toHexString(hashCode()) Ruft den Hash-Codewert dieses Objekts ab (int-Typ), und verwendet die Wrapper-Klasse Integer, um den Hash-Code dieses int-Typwerts abzurufen, ihn in eine hexadezimale Ganzzahl ohne Vorzeichen umzuwandeln und die konvertierte hexadezimale Ganzzahl in Form einer Zeichenfolge auszudrücken
Die Ausgabefunktion println wird also durch Aufrufen von toString implementiert auf der untersten Ebene. Wenn Sie das Druckobjekt für den spezifischen Inhalt realisieren möchten, müssen wir nur die toString-Methode in der Object-Klasse nach unseren eigenen Vorstellungen umschreibenpublic class Person { String name; String gender; int age; public Person(String name, String gender, int age) { this.name = name; this.gender = gender; this.age = age; } public static void main(String[] args) { Person person = new Person("Jim","男", 18); System.out.println(person); } }Ausführungsergebnis: 3 gleicht die Methode ausWenn == in Java verglichen wird: Wenn die linke und rechte Seite von == Basistypvariablen sind, besteht der Vergleich darin, ob die Werte in den Variablen gleich sind
Wenn Die linke und rechte Seite von == sind Variablen vom Referenztyp. Der Vergleich besteht darin, ob die Adressen der Referenzvariablen gleich sind
Wenn Sie den Inhalt im Objekt vergleichen möchten, müssen Sie die Methode equal im Objekt neu schreiben, weil Die Equals-Methode vergleicht standardmäßig auch basierend auf der Adresse. Das Folgende ist der Quellcode der Equals-Methode:
public class Person { String name; String gender; int age; @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", gender='" + gender + '\'' + ", age=" + age + '}'; } public Person(String name, String gender, int age) { this.name = name; this.gender = gender; this.age = age; } public static void main(String[] args) { Person person = new Person("xin","男", 21); System.out.println(person); } }
4. HashCode-Methode
Die Hashcode-Methode wird verwendet, um zu bestimmen, ob das Objekt an derselben Stelle im Speicher gespeichert ist
Die Funktion von hashCode() in der Hash-Tabelle besteht darin, den Hash-Code des Objekts abzurufen und dann zu bestimmen, ob sich das Objekt in der Hash-Tabelle befindet Standort. Quellcode der HashCode-Methode: Diese Methode ist eine native Methode und die unterste Ebene ist in C/C++-Code geschrieben; sie kann im Compiler nicht beobachtet werden. Wir glauben, dass zwei Objekte mit demselben Namen und demselben Alter dasselbe Objekt sind und am selben Ort gespeichert werden sollten. Sehen Sie sich den unten angegebenen Code an. Es gibt kein Überschreiben der hashCode()-Methode der beiden Objekte haben den gleichen Inhalt, aber der resultierende Hash-Wert ist unterschiedlich:class Person{ private String name ; private int age ; public Person(String name, int age) { this.age = age ; this.name = name ; } @Override public boolean equals(Object obj) { if (obj == null) { return false ; } if(this == obj) { return true ; } //不是Person类对象 if (!(obj instanceof Person)) { return false ; } Person person = (Person) obj ; // 向下转型,比较属性值 return this.name.equals(person.name) && this.age==person.age ; } } public class Test { public static void main(String[] args) { Person p1 = new Person("xin", 20); Person p2 = new Person("xin", 20); Person p3 = new Person("rong", 21); System.out.println(p1.equals(p2)); System.out.println(p1.equals(p3)); } }Ausführungsergebnis: Wenn wir also glauben wollen, dass zwei Objekte den gleichen Inhalt haben, sollten ihre Speicherorte gleich sein, und das brauchen wir um die Methode hashCode() neu zu schreiben.
class Person { public String name; public int age; public Person(String name, int age) { this.name = name; this.age = age; } } public class TestDemo4 { public static void main(String[] args) { Person per1 = new Person("xin", 21) ; Person per2 = new Person("xin", 21) ; System.out.println(per1.hashCode()); System.out.println(per2.hashCode()); } }Ausführungsergebnis:
Das obige ist der detaillierte Inhalt vonSo verwenden Sie Methoden in der Java-Objektklasse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!