2010-01-20 17 views
8

Warum gibt es einen primitiven Typ für Integer (int), obwohl wir ein Objekt für Integer als Integer haben? Aber das Gleiche ist nicht mit String-Typ. Es gibt keinen solchen primitiven Typ für String. Always String behandelt Objektreferenz?Integer als primitiver Typ

Antwort

18

Geschwindigkeit. Es ist viel schneller, wenn Maschinencode zwei int-Befehle mit nativen CPU-Anweisungen hinzufügt, statt zwei Integer-Objekte zu verwenden, die int-Werte daraus zu extrahieren und dann diese hinzuzufügen und ein neues Integer-Ergebnisobjekt zu erzeugen. (how JNI maps primitives)

Strings sind komplex, haben viele Methoden und als solche keinen Maschinencode Kontrapunkt. Sie werden zu einem wahren Objekt befördert. Außerdem teilt sich ein String den Zustand mit anderen Strings, die mit demselben Wert erstellt wurden. Kein primitiver Wert teilt den Zustand mit anderen primitiven Werten wie diesem. (immutable can be shared | primitive no sharing)

+1

Ich würde auch Platz hinzufügen. Weniger Platz zum Speichern einer ganzen Zahl im Speicher als ein ganzes Objekt mit allen seinen Operationen. – Alex

0

Ein String-Datentyp ist wesentlich komplexer als ein int - es gibt eine variable Menge an Speicher, um eine Zeichenfolge für eine Sache zu halten.

1

Dies liegt daran, dass Prozessoren (CPUs) direkte Unterstützung für Integer-Typen, aber nicht für Strings haben. Aus Performancegründen unterstützt Java einige native Typen, die wahrscheinlich von den Prozessoren unterstützt werden, auf denen die JVM laufen kann.

0

Letztendlich werden die Berechnungen auf Maschinensprache durchgeführt. Ich frage mich, was den Unterschied zwischen Primitiven und Objekten in Bezug auf die Leistung ausmacht. Ausgearbeitete Antwort wird geschätzt.

+0

Dies sollte ein Kommentar sein - keine "Antwort" Bitte konkurrieren Sie die SO-Tour hier: http://StackOverflow.com/Tour –

Verwandte Themen