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
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)
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.
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.
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.
Dies sollte ein Kommentar sein - keine "Antwort" Bitte konkurrieren Sie die SO-Tour hier: http://StackOverflow.com/Tour –
- 1. Objekt oder primitiver Typ
- 2. Android: Wie Objekte als primitiver Typ in sqlite gespeichert werden
- 3. Warum ist `str` ein primitiver Typ?
- 4. Zugriff auf Basisklasse primitiver Typ in Python
- 5. Synonym für Integer-Typ?
- 6. Bigquery: INTEGER Typ Überlauf
- 7. Integer-Typ Guss Ausgabe
- 8. Pandas Mixed Typ Integer
- 9. Druck-Bit-Typ als Integer? Wie ist die Umwandlung?
- 10. libpq send integer als binär
- 11. Geburtstag in Integer-Typ validieren
- 12. postgresql Ordnung Ziffernfolge als integer
- 13. Integer-Konstanten als Strings?
- 14. Auf 32-Bit-CPUs ist ein Integer-Typ effizienter als ein "kurzer" Typ?
- 15. Vermeiden von primitiver Besessenheit in Haskell
- 16. C++ Integer-Typ des Zweifache der Breite eines gegebenen Typ
- 17. Operator '=' ist nicht definiert für Typ 'DBNull' und Typ 'Integer'
- 18. Überschreiben der Konvertierung primitiver Datentypen
- 19. Gibt die Java JLS die Heraufstufung primitiver Wrapper-Typen an?
- 20. C++ Fließkomma zu Integer Typ Konvertierungen
- 21. In C# welcher Typ sind Integer-Literale?
- 22. @Value Anmerkung Typ Integer von String Casting
- 23. kann nicht implizit Typ ‚string‘ auf ‚integer‘
- 24. Java Integer Vergleich: größer als
- 25. Javascript Integer als String interpretiert?
- 26. Postgres Integer-Arrays als Parameter?
- 27. Warum wird "double" als Integer dargestellt?
- 28. Wie wird ein primitiver Typ beim Kompilieren zu verschiedenen Zielen vorübergehend durch einen anderen ersetzt?
- 29. Integer
- 30. Primitiver aber effizienter Grep-Klon in Haskell?
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