17
Primitive Datentypen
Sebastian Eidecker edited this page 2019-11-18 13:16:28 +00:00

4 verschiedene Typen

- Ganzzahlen: ``byte``, ``short``, ``int``, ``long`` (Standard ``int``, Default ``0``)
- Gleitkommazahlen: ``float``, ``double`` (Standard ``double``, Default ``0.0``)
- Boolsch: ``boolean`` (Default ``false``)
- Character: ``char`` (Default ``'\u0000'``).

Definition per Literal

  • Unterstriche können zur Gliederung verwendet werden
  • Auch bei oktaler, hexadezimaler, binärer Deklaration
  • An beliebiger Stelle, auch mehrere nacheinander ...
  • ... außer am Anfang oder Ende und
  • ... vor und nach Sonderzeichen (Dezimalpunkt X, B)

Ganzzahlen

  • Suffix L,l zur Deklaration von long-Typen (auch in oktal/binär/hex-Schreibweise)
  • Dezimal: int i = 323
  • Binär: Präfix 0B, 0b: int i = 0b10101010100;. Nur 1 und 0 erlaubt.
  • Oktal: Präfix 0, 0-7 erlaubt. Achtung: 011 ist eine Oktalzahl, führende Null wird nicht ignoriert.
  • Hexadezimal: Präfix 0x, 0X, 0-F/f erlaubt, auch groß/klein gemischt.
  • Wenn Bereich passend können auch char-Literale zugewiesen werden.

Gleitkommazahlen

  • Suffix f, F für float. (d, D für Double möglich, aber sinnlos)
  • Da double Standard Compilerfehler, wenn einem float ein Literal ohne Suffix zugewiesen wird.
  • Ganzzahlen gehen aber bei float (float f = 1L;)

Character

  • Einzelner Buchstabe in einzelnen Hochkommata char c = 'a'; oder Unicode-Code char c = '\u004E'
  • Auch Zahl im Bereich 0-65535 möglich

Boolean

  • false und true, sonst nichts!

Implizite Umwandlungen (Casts)

  • Einfache Literale (int) werden automatisch gecastet (auch auf Gleitkommazahlen)
  • Kleinere Typen werden bei Zuweisung explizit in größere gecastet
  • Zuweisung zu char nicht implizit möglich, da kein negativer Wertebereich
  • Ganzzahlen können implizit zu Gleitkommazahlen gecastet werden: float f = 1L;
  • Besonderheit Wrapper: Float und Double können keine Ganzzahl-Literale zugewiesen werden! Suffix oder Cast benötigt.

Explizite Casts

  • Immer benötigt, wenn nicht sichergestellt ist, dass Zahl passt
  • +, -: Erzeugt bei Ganzzahlen int, expliziter Cast bei kleineren Typen notwendig. Kein Problem bei float
  • +=, -=: Kein Problem, Typ bleibt
  • Zu große Literale können nur mit Cast zugewiesen werden. Dann aber außerhalb Bereich möglich, zur Not wird abgeschnitten.
  • Auch bei Überlauf dürfen Literale nicht größer als möglich definiert werden. Rechenergebnisse können aber größer sein.
  • Explizit können auch Gleitkommazahlen zu Ganzzahlen zugewiesen werden. Dann werden Nachkommastellen abgeschnitten

Equals mit Wrappern

  • equals() kann nicht direkt auf Literalen oder primitiven Variablen aufgerufen werden.
  • Kann aber als Parameter in die equals-methode gegeben werden.
  • Wird in den Wrapper-Typ des Primitiven gewandelt
  • Wrapper prüfen auf exakten Typen, nicht nur auf semantische Gleichheit: new Long(1).equals(1) == false

Diverses

  • Unterstriche, hex- oktal-, binär-Literale können nicht in den String-Konstruktoren der Wrapper verwendet werden.
  • == für inhaltlichen Vergleich
  • Werden byValue übergeben
  • Standard für Ganzzahl: int
  • Standard für Gleitkommazahl: double
  • Cast von double/float nach int/long: Schneidet Nachkommastellen ab
  • Vergleich von Ganz- und Gleitkommazahl mit == möglich, aber gefährlich