Java: Warum kann ich nicht den cast von int auf Long

Alle zahlen in Java sind, soll der int-Typ.
Die folgende Zeile ist legal in Java - >1.5

Short s = 1; //Will compile to Short s = Short.valueOf((short)1) - thus you can't exceed short max value i.e.
Short s =  4444; //is invalid for autoboxing

Gleiche mechanik gehen für Integer und Byte Instanziierung. Aber Lange funktioniert völlig anders. Der folgende code gibt compile-Zeit-Fehler

Long l = 10;

Lange verwendet den gleichen Ansatz für autoboxing von long-Typen, so

Long l = 10L; //is valid and is translated into Long.valueOf(10L)

Ich kann nicht sehen, warum int zugewiesen werden kann, um eine Long variable. Irgendwelche Gedanken zu diesem Thema?

  • Ja, ich verstehe, dass Lange wrapper-Typ, während int ist ein primitiver. Die Frage betrifft autoboxing selbst. Warum nicht compiller machen Long l = Long.valueOf(1); oder Long l = new Long(1); während Sie können dies tun, für Short und Byte-wrapper-Typen?
  • "Alle zahlen, die in java sind, soll der int-Typ." ...was?
  • actualy, ich meinte: wenn Sie schreiben, somevar = 10 - 10 wird implizit int gleiche gilt für die Aussage byte a = 10, die wirklich verwandelt sich in byte a = (byte) 10 wobei 10 eigentlich der int-Typ
Schreibe einen Kommentar