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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, die Frage war nicht, über casting-primitive und Wrapper im Allgemeinen.
Die Frage war über Unterschied zwischen Guss-int in java.lang.Long und int in java.lang.Kurz zum Beispiel.
JLS:
"Darüber hinaus, wenn der Ausdruck ist ein konstanter Ausdruck (§15.28) vom Typ byte, short, char oder int:
Also alle <=32bit primitive können gegossen werden leicht und lange (64-bit) erfordert spezielle casting.
Es scheint unlogisch.
Alle unlogischen Dinge wie üblich hat die Erklärung in rückwärts-Kompatibilität oder historischen Entwicklung in java.
E. g. die Klassen Integer und Long existieren in java seit der version 1.0. Klassen Short und Byte existieren in java seit 1.1.
Das ist auf den start-Punkt Integrale Zahl kann zwei Typen: integer oder long. Also ich denke, es gibt verschiedene casting-Regeln für diese beiden Arten von zahlen. Und dann short und byte Hinzugefügt wurden.
Ich nehme an, short und byte 32-bit-Implementierung in konkreten JVMs.
Da Lange mit dem ersten Großbuchstaben ist eine wrapper-Klasse und nicht der primitive Typ .
Werfen Sie einen Blick hier .
Short
ist eine wrapper-Klasse zu. Dies spricht nicht den Unterschied im Verhalten.Können Sie werfen
int
zulong
undlong
zuLong
aber du kannst Sie nicht wirken
int
zuLong
ist es richtig zu schreiben
Long l = (long) 10;
Short
diese Weise. Die Frage ist: Warum der Unterschied?1,new Long(intValue);
2,Lange.valueOf(intValue);
https://stackoverflow.com/a/50225345/9744452