Java-Kompilierzeitfehler beim Casting

8

Der folgende Code gibt mir den Kompilierzeitfehler Typenkonflikt: kann nicht von int in Byte

konvertiert werden %Vor%

aber das unten nicht

%Vor%

Ich verstehe nicht, warum sich der Compiler im Falle eines Finales verhält?

    
Anand 30.08.2012, 18:15
quelle

5 Antworten

7

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.

    
Kirsten Koa 30.08.2012, 18:16
quelle
3

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

    
Buu Nguyen 30.08.2012 18:21
quelle
1

Versuchen Sie es

%Vor%

Vergleichen Sie dies mit

%Vor%

Dies gibt Ihnen eine Vorstellung davon, wie implizite Verengung von int auf Byte stattfindet, d. h. es findet nur statt, wenn der zugewiesene Wert ein konstanter Ausdruck ist

    
AnkDasCo 30.08.2012 19:46
quelle
0
  

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.

    
Karups Veeraiah 30.08.2012 18:31
quelle
0

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 .

reichen

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%     
satyam.kudikala 30.08.2012 19:14
quelle

Tags und Links