Wenn in arithmetischen Operationen shortautomatisch inthochgestuft wird, warum dann:
short thirty = 10 * 3;
Eine rechtliche Zuordnung zur shortVariablen 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 intWerts zu a shortnicht zulässig ist, ohne wie erwartet zu gießen.
Ist bei numerischen Literalen etwas Besonderes los?
10 * 3und 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 10noch 3Shorts noch werden sie befördert, sie sind wörtlich.
10und vom Compiler 3als ints 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).