Ich denke, es liegt daran, dass 10 in ein Byte passt, aber wenn die ganze Zahl etwas mehr als 8 Bits benötigt, dann wäre es nicht mehr in der Lage, diese Zuweisung richtig durchzuführen.
Bearbeiten
Um es zu verdeutlichen, erlaubt es der Compiler, den Int als eine Konstante zu behandeln, so dass er konstant falten kann. Es verhindert wahrscheinlich die Zuweisung mit dem nicht-finalen int, weil es diesen Wert zur Kompilierungszeit nicht kennt und es könnte viel größer sein als das, was ein Byte enthalten kann.
Fall 1: Kompilierfehler, weil int
möglicherweise nicht in byte
passt; eine explizite Besetzung ist notwendig
Fall 2: Der Compiler kompiliert die 2. Anweisung zu byte b = 10;
(als i
ist final
), also kein Fehler
Ich habe nicht verstanden, warum der Compiler die 2. Anweisung zum Byte b = 10 - anand
kompiliert
Das liegt daran, dass Sie dem Compiler mitteilen, dass die Variable 'i' immer den Wert '10' enthält. Daher würde der Compiler "i" durch "10" ersetzen, wo immer es referenziert wird. Auf diese Weise würde JVM die Arbeit erleichtern.
Fall 1:
%Vor% int
primitiver Typwert kann von -2,147,483,648 [-231]
aka Integer.MIN_VALUE
bis +2,147,483,647 [2 31-1]
aka Integer.MAX_VALUE
.
int i= 10
bedeutet, dass der Compiler annimmt, dass der Wert von int von -2.147.483.648 [-231] bis +2.147.483.647 [2 31-1] reichen kann, aber byte kann diesen Wert nicht halten. Der Compiler gibt also den Fehler.
Fall 2:
%Vor%Hier wird die int-Variable als final deklariert und auf 10 initialisiert. Das Byte kann Werte zwischen -128 und 127 enthalten und wird nicht durch das Out-Programm geändert. Aus diesem Grund gibt der Compiler keinen Fehler.
Wenn Sie dieselbe Variable mit 128 deklarieren, erhalten Sie einen Fehler. Ex:
%Vor%Tags und Links java