Il seguente java program valido di IMHO non viene compilato perché il compilatore javac di Oracle 1.7 pensa che ci sia una possibile perdita di precisione nelle righe 5 e 6. Se disattivi la riga 3 e commenta la riga 4, questa viene compilata correttamente.
Qualcuno potrebbe spiegare perché il compilatore crede che vi sia una perdita di precisione nell'assegnazione al byte b2
o b3
?
public class BUG {
public static void main( String[] args ) {
//final byte b1 = 9;
byte b1 = 9;
final byte b2 = -b1; // fine if line 3 is uncommented and line 4 is commented
final byte b3 = 0 - b1; // fine if line 3 is uncommented and line 4 is commented
}
}
Se il mio codice di esempio è corretto, vorrei segnalarlo come un errore ma non riesco a scoprire dove. Qualcuno potrebbe spiegare cosa sta dicendo il messaggio di errore del compilatore in questo caso e perché è corretto?