2017-04-23 5 views
-2

Ich habe im Forum gesucht und ich verstehe, getClass() gibt eine Referenz zurück, aber das ist eine spezielle Referenz, und jeder Aufruf an getClass gibt genau dieselbe Referenz für eine bestimmte Klasse zurück. Das bedeutet, dass wir "==" anstelle von "equals" verwenden können, um sie zu vergleichen.Was liefert getClass() als Referenz?

Ich möchte wissen, wie diese besondere Referenz erstellt und zurückgegeben jedes Mal, und wie es ist immer gleich

+1

siehe Link http://stackoverflow.com/questions/2812680/getclass-method-in-java –

Antwort

1

Die Class Objekt für jede Klasse ein Singleton ist. Das heißt, es ist so geschrieben, dass für jede Klasse nur ein Class Objekt existiert.

+0

Ich fürchte, das ist nicht die Antwort, die ich suche. Ich bin mir nicht sicher, aber ich denke, es in Klasse Loader bauen, können Sie mir mehr Details geben? –

+0

Mehr Details was genau? –

+0

wie getClass funktioniert! macht es einen Speicherplatz, wenn wir den Code für jede Klasse ausführen? –

0
  1. Die Methode getClass() gibt die Laufzeitklasse des Objekts zurück.
  2. zurückgegeben Klassenobjekt ist das Objekt, das durch statische synchronisierte Methoden der dargestellten Klasse gesperrt ist.
+0

Sie meinen, wenn wir den Code ausführen, erstellt getClass eine Referenz für unsere Klasse und gibt sie jedes Mal zurück getClass anrufen? –

0

A. R., ich vermute, dass Sie dieser Klasse Objekt ein Class Objekt mit einer Instanz sind verwirrend. Sie sind nicht gleich.

Es gibt nur ein Objekt Class für jeden Java-Typ. getClass gibt einen Verweis auf das Class Objekt zurück. Da es nur ein solches Objekt gibt, sind alle Referenzen identisch und == funktioniert. Das Klassenobjekt wird beim ersten Mal von ClassLoader geladen. Niemand muss darauf Bezug nehmen. Es sitzt dort, im Speicher und kann referenziert werden. Wie @JoeC darauf hingewiesen hat, ist es ein Singleton. Bam!

Es kann viele Instanzen einer bestimmten Klasse geben. Jede unabhängige Instanz hat ihren eigenen Status, der nicht mit einer anderen Instanz geteilt wird. Eines der Dinge, die jede Instanz als Teil ihres Zustands hat, ist ein Verweis auf ihre Class. Diese Referenz ist natürlich die gleiche wie die Referenz in jeder anderen Instanz der Klasse. Sie sind ==!

Edited hinzuzufügen: Es kann hilfreich sein zu wissen, dass Class Objekte sind, selbst Instanzen des Typs Class<?>. Es kann viele String s geben, aber es gibt nur eine Instanz von Class<String> und sein Typ (Klasse) ist Class<?>.