Wenn in arithmetischen Operationen short
automatisch int
hochgestuft wird, warum dann:
short thirty = 10 * 3;
Eine rechtliche Zuordnung zur short
Variablen thirty
?
Dies wiederum:
short ten = 10;
short three = 3;
short thirty = ten * three; // DOES NOT COMPILE AS EXPECTED
so gut wie das:
int ten = 10;
int three = 3;
short thirty = ten * three; // DOES NOT COMPILE AS EXPECTED
wird nicht kompiliert, da das Zuweisen eines int
Werts zu a short
nicht zulässig ist, ohne wie erwartet zu gießen.
Ist bei numerischen Literalen etwas Besonderes los?
10 * 3
und initialisiert die Variable mit dem Ergebnis. In Ihrem nicht funktionierenden Beispiel erfolgt die Berechnung zur Laufzeit, wenn die JVM den Kurzschluss umwandelt.
final int ten = 10; final int three = 3; short thirty = ten * three;
kompiliert wird.
If short is automatically promoted to int in arithmetic operations
- das ist nicht relevant. Weder 10
noch 3
Shorts noch werden sie befördert, sie sind wörtlich.
10
und vom Compiler 3
als int
s ausgewertet werden ?
short thirty = 10 * 3;
wird höchstwahrscheinlich durchshort thirty = 30;
den Compiler ersetzt, der dann eine gültige Anweisung ist. (Ich müsste allerdings den entsprechenden JLS-Abschnitt nachschlagen).