2015-04-18 4 views
5

Ich nehme Datenstrukturen und Analysen. Wir haben darüber nachgedacht, wie Zuordnung und Vergleiche von Objekttypen viel langsamer ist als die Zuweisung und Vergleiche für grundlegende Typen wie int.Sind Java "Zeiger" ganze Zahlen?

Ich erinnere mich an das Lernen von C (alle diese vor fast dreißig Jahren) und wie Zeiger in C ganzzahlige Aufrufe sind (oder waren). Ist Java ähnlich heute, ein Verweis auf ein instanzierte Objekt ist intern eine ganze Zahl Adresse des Speichers, und als solche sind Vergleiche wie

if (MyObject != null) {...} 

eine Integer-Operation im Rahmen?

Ich hoffe meine Frage ist klar. Ich habe recherchiert und kann keine klare Antwort darauf finden, wie Java sein dynamisches Gedächtnis verwaltet.

+1

Ich finde diesen Beitrag gefährlich verwirrt. Sie scheinen zu unterstellen, dass "Objektvergleich ist langsam", und das Vergleichen von Zeigern ist schnell und daher besser. Aber das sind ganz andere Dinge. Der eine ist Wertgleichheit und der andere ist die Objektidentität. Um eine Analogie in Python zu geben, geht es um '99 == 99', und die andere ist über' 301 ist 301' –

+0

Ich unterwerfe nicht, frage ich. Danke für deinen Beitrag. – failure

+0

Alle Werte in Java sind intern "Integer", einschließlich Fließkommazahlen. Es ist eine Frage, wie sie interpretiert werden. Aber du verwirrst das Vergleichen von * Zeigern * mit Vergleichen von * Objekten *, die auf - zwei völlig verschiedene Dinge zeigen. Ein Vergleich zwischen zwei Java "Zeigern" (Referenzen) mit '==' ist ungefähr so ​​schnell wie ein Vergleich zweier * long * Werte. –

Antwort

3

Die kurze Antwort ist ja, ein Verweis auf ein Objekt wird als Zeiger gespeichert, wie es in C ist

Ich bin nicht sicher, was Sie gespeichert als „integer“ bedeuten, aber wenn das, was Sie wollen, zu mach etwas an ihnen, wie du es in C machen kannst (zB addiere Integer zu einem Pointer, etc.), dann kannst du nicht mit Java.

Für den Rest ist es fast das Gleiche, außer dass es von Java behandelt wird.

JLS 4.3.1 spezifiziert, dass eine Referenz auf ein Objekt als Zeiger gespeichert ist:

Die Referenzwerte (oft nur Referenzen) sind Zeiger auf diese Objekte und eine spezielle Nullreferenz, die verweist kein Objekt.

+0

In C, ursprünglichen Vor-ANSI C, Zeiger waren Ganzzahlen und damit Operationen auf Zeigern, insbesondere Zuweisung, ist so schnell wie eine Operation auf einer ganzen Zahl. Ich bin nicht auf der Suche nach direkter Kontrolle, ich bin nur neugierig, was der Aufwand für solche Operationen ist. Danke! – failure

+0

@failure Gern geschehen. –