it-swarm.com.de

Was ist der Zweck von long, double, byte in Java?

Also lerne ich Java und habe eine Frage. Es scheint, dass die Typen int, boolean und string für fast alles geeignet sind, was ich je in Bezug auf Variablen benötige, außer vielleicht float, wenn Dezimalzahlen in einer Zahl benötigt werden.

Meine Frage ist, werden die anderen Typen wie long, double, byte, char usw. in der normalen, alltäglichen Programmierung verwendet? Für welche praktischen Dinge könnten diese verwendet werden? Für was gibt es sie? 

45
Click Upvote

Mit der möglichen Ausnahme von "short", was wohl eine Verschwendung von Platz ist - manchmal sind es buchstäblich alle Pferde für Kurse:

  • Verwenden Sie ein int , wenn Sie keine gebrochenen Zahlen benötigen und keinen Grund haben, etwas anderes zu verwenden. Bei den meisten Prozessor-/Betriebssystemkonfigurationen entspricht dies der Anzahl, mit der der Computer am effizientesten umgehen kann.
  • Verwenden Sie ein double , wenn Sie gebrochene Zahlen benötigen und keinen Grund haben, etwas anderes zu verwenden.
  • Verwenden Sie ein Zeichen , wenn Sie ein Zeichen darstellen möchten (oder in seltenen Fällen, in denen Sie eine Zwei-Byte-Arithmetik ohne Vorzeichen benötigen).
  • Verwenden Sie ein Byte , wenn Sie ein vorzeichenbehaftetes Byte (selten!) Bearbeiten müssen, oder wenn Sie müssen sich in einem Block von Bytes bewegen.
  • Verwenden Sie einen Booleschen Wert , wenn Sie ein einfaches Ja/Nein-Flag benötigen.
  • Verwenden Sie ein langes , wenn Sie eine ganze Zahl benötigen, die Größe jedoch 2 Milliarden überschreiten kann (Dateigröße, Zeitmessung in Millisekunden/Nanosekunden, in fortgeschrittenen Anwendungen zum Komprimieren mehrerer Daten zu einer einzigen Zahl);
  • Verwenden Sie ein float für die seltenen Fälle, in denen Sie entweder (a) eine große Anzahl von ihnen speichern und die Speicherersparnis lohnt sich, oder (b) führen eine große Anzahl von Berechnungen durch und können den Genauigkeitsverlust sich leisten. Für die meisten Anwendungen bietet "float" eine sehr geringe Präzision, aber die Vorgänge können doppelt so schnell sein - es lohnt sich jedoch, dies auf Ihrem Prozessor zu testen, um festzustellen, dass dies tatsächlich der Fall ist! [*]
  • Verwenden Sie ein kurzes , wenn Sie wirklich 2-Byte-Arithmetik mit Vorzeichen benötigen. Es gibt nicht so viele Fälle ...

[*] In Hotspot auf Pentium-Architekturen beispielsweise dauert f loat- und double-Operationen im Allgemeinen genau dieselbe Zeit , mit Ausnahme der Division.

Lassen Sie sich nicht zu sehr auf die Speichernutzung dieser Typen ein, es sei denn, Sie verstehen es wirklich . Zum Beispiel:

  • Jede Objektgröße wird in Hotspot auf 16 Byte gerundet, sodass ein Objekt mit einem Einzelbyte-Feld genau denselben Platz einnimmt wie ein einzelnes Objekt mit einem langes oder doppeltes Feld;
  • bei der Übergabe von Parametern an eine Methode belegt jeder Typ 4 oder 8 Bytes auf dem Stapel : Sie sparen nichts, wenn Sie einen Methodenparameter ändern von, Sag, ein Int zu einem Short! (Ich habe gesehen, wie Leute das getan haben ...)

Offensichtlich gibt es bestimmte API-Aufrufe (z. B. verschiedene Aufrufe für nicht CPU-intensive Tasks, die aus irgendeinem Grund Floats erfordern), bei denen Sie nur den Typ übergeben müssen, nach dem Sie gefragt werden ...!

Beachten Sie, dass String kein primitiver Typ ist und daher nicht wirklich in diese Liste gehört.

114
Neil Coffey

Ein Java Int ist 32 Bit, während ein Long 64 Bit ist. Wenn Sie also ganze Zahlen darstellen müssen, die größer als 2 ^ 31 sind, ist Long Ihr Freund. Ein typisches Beispiel für die Verwendung von long finden Sie unter System.currentTimeMillis ().

Ein Byte besteht aus 8 Bits und ist bei der meisten modernen Hardware die kleinste adressierbare Entität. Es ist also erforderlich, wenn binäre Daten aus einer Datei gelesen werden.

Ein Double hat die doppelte Größe eines Floats, daher würden Sie normalerweise einen Double anstelle eines Floats verwenden, es sei denn, Sie haben Einschränkungen hinsichtlich der Größe oder der Geschwindigkeit und ein Float verfügt über ausreichende Kapazität.

Ein Kurzschluss besteht aus zwei Bytes und 16 Bit. Meiner Meinung nach ist dies der am wenigsten notwendige Datentyp, und ich habe das im eigentlichen Code nicht wirklich gesehen, aber auch hier kann es nützlich sein, binäre Dateiformate zu lesen oder Netzwerkprotokolle auf niedriger Ebene zu verwenden. Zum Beispiel sind IP-Port-Nummern 16 Bit.

Char steht für ein einzelnes Zeichen mit 16 Bit. Dies ist die gleiche Größe wie ein Kurzschluss, aber ein Kurzschluss ist signiert (-32768 bis 32767), während ein Zeichen unsigniert ist (0 bis 65535). (Dies bedeutet, dass eine IP-Port-Nummer wahrscheinlich korrekter als ein Kurzname dargestellt wird, aber dies scheint außerhalb des vorgesehenen Bereichs für Zeichen zu liegen ...)

Die wirklich autorisierende Quelle für diese Details finden Sie in der Java-Sprachspezifikation .

18
Rolf Rander

Sie können einen Blick auf hier über die primitiven Typen in Java werfen.

Das Hauptinteresse zwischen diesen Typen ist die Speichernutzung. Beispielsweise verwendet int 32 Bit, während Byte nur 8 Bit verwendet.

Stellen Sie sich vor, Sie arbeiten an großen Strukturen (Arrays, Matrizen ...), dann kümmern Sie sich besser um den verwendeten Typ, um den Speicherbedarf zu reduzieren.

3
Romain Linsolas

Ich denke, es gibt verschiedene Arten von Typen dieser Art:

1) Sie erzwingen Beschränkungen hinsichtlich der Größe (und des Vorzeichens) von Variablen, die in ihnen gespeichert werden können. 

2) Sie können den Code etwas klarer machen (wenn Sie beispielsweise ein Zeichen verwenden, kann jeder, der den Code liest, wissen, was Sie darin speichern möchten).

3) Sie können Speicher sparen. Wenn Sie ein großes Array von Zahlen haben, die alle nicht vorzeichenbehaftet sind und unter 256 liegen, können Sie es als Array von Bytes deklarieren. Dadurch sparen Sie etwas Speicherplatz, wenn Sie ein Array von Ints deklarieren.

4) Sie benötigen einen langen Wert, wenn die zu speichernden Zahlen größer als 2 ^ 32 sind, und für sehr große Fließkommazahlen ein Doppelter.

3
Ben

Ganzzahlen sollte generell für Zahlen verwendet werden.
Doubles sind der grundlegende Datentyp, der zur Darstellung von Dezimalzahlen verwendet wird.
Strings kann im Wesentlichen jeden Datentyp enthalten, aber es ist einfacher, ints zu verwenden, und es ist verwirrend, String außer Text zu verwenden.
Zeichen werden verwendet, wenn Sie nur einen Buchstaben halten möchten, obwohl sie im Wesentlichen nur der Klarheit dienen.
Shorts, Longs und Floats sind möglicherweise nicht erforderlich. Wenn Sie beispielsweise ein Array der Größe 100000 erstellen, das nur Zahlen unter 1.000 enthalten muss, möchten Sie dies verwenden Shorts, einfach um Platz zu sparen.

0
Ben Bowles

Die primitiven Datentypen sind erforderlich, da sie die Grundlage jeder komplexen Sammlung sind.

long, double, byte usw. werden verwendet, wenn Sie nur eine kleine Ganzzahl (oder was auch immer) benötigen, die Ihren Heapspeicherplatz nicht verschwendet.

Ich weiß, es gibt genug von RAM in unserer Zeit, aber Sie sollten es nicht verschwenden.

Ich brauche die "kleinen" für Datenbank- und Streamoperationen.

0
guerda