La domanda è:Numero di operatori Java interessante
Perché in questo caso ottengo errore di compilazione in Java?
byte x = 0;
x = 128;
Ma questo è legale:
x+= 999l;
Io uso Eclipse, JDK 7.
Thank You
La domanda è:Numero di operatori Java interessante
Perché in questo caso ottengo errore di compilazione in Java?
byte x = 0;
x = 128;
Ma questo è legale:
x+= 999l;
Io uso Eclipse, JDK 7.
Thank You
Nella tua prima:
byte x = 0;
x = 128;
Un byte è un tipo integrale firmato, largo 8 bit e può esprimere l'intervallo di -128
a +127
.
x = 128
significa "assegnare x
a 128
", e per impostazione predefinita, 128
è di tipo int
, quindi si sta cercando di assegnare un int
a byte
che causerebbe Possible loss of precision
errori, perché int
è più ampia rispetto byte
. Per farlo funzionare, devi espressamente assegnare il valore di 128
.
byte x = 0;
x = (byte)128; // x is now -128.
Per il vostro secondo esempio, l'aggiunta di valori a x
va bene, ma basta overflow del valori.
byte x = 0;
x += 999L; // don't really need the long qualifier here
// x is now -25.
byte
è firmato e può contenere solo un valore massimo di 127
e un valore minimo di -128
, ecco perché il primo caso ti dà un errore di compilazione.
Il secondo caso compila perché e il valore aggiunto a un 'byte' avvolge, si noti che 999 % 128 = 103
, che è nel campo valido di un 'byte'
Non importa quale numero abbia aggiunto, l'aggiunta non fallirà mai nella compilazione; sarà solo un overflow, al contrario del tentativo di assegnare una costante in tempo di compilazione fuori range. –
@MarkoTopolnik Vero, grazie –
È interessante, ma perché? Nel compilatore si può vedere che esso trabocca e può vietarlo ma non lo fa .. –
In questa prima affermazione x = 128
, dal momento che l'intervallo di byte è 0-127
in Java richiede un cast esplicito e quindi l'errore di compilazione. Nel secondo caso, trabocca e viene convertito in -25, che si trova nell'intervallo di byte.
byte ha un intervallo da -128 a 127. questo x + = 999l; funziona perché è un operatore di assegnazione composto. dai un'occhiata qui possible same or alike question.
Che cosa stai cercando di fare esattamente, i rispettivi blocchi di codice non hanno nulla in comune oltre ad avere una variabile x? – sjakubowski
Vuol dire che x è anche un byte nel secondo caso –