Pytanie brzmi:Operatory Java interesujący problem
Dlaczego w tym przypadku wystąpił błąd kompilacji w Javie?
byte x = 0;
x = 128;
Ale to jest legalne:
x+= 999l;
używam Eclipse, jdk 7.
Dziękuję
Pytanie brzmi:Operatory Java interesujący problem
Dlaczego w tym przypadku wystąpił błąd kompilacji w Javie?
byte x = 0;
x = 128;
Ale to jest legalne:
x+= 999l;
używam Eclipse, jdk 7.
Dziękuję
w pierwszej jedno:
byte x = 0;
x = 128;
Bajt to oznaczenie typu całkowanego o szerokości 8 bitów i może wyrażać zakres od -128
do +127
.
x = 128
oznacza „przypisać x
do 128
” i domyślnie 128
jest typu int
, więc starasz przypisała int
do byte
co spowodowałoby Possible loss of precision
błędy, ponieważ int
jest szerszy niż byte
. Aby to działało, musiałbyś jawnie rzucić wartość 128
.
byte x = 0;
x = (byte)128; // x is now -128.
Za drugie przykład dodanie wartości do x
jest w porządku, ale po prostu przelewać wartości.
byte x = 0;
x += 999L; // don't really need the long qualifier here
// x is now -25.
byte
jest podpisana i można tylko posiadać maksymalną wartość 127
oraz minimalna wartość -128
, dlatego w pierwszym przypadku występuje błąd kompilacji.
Drugi przypadek kompiluje bo i wartość dodać do „bajt” owija wokół zauważyć, że 999 % 128 = 103
, który znajduje się w ważnej zasięgu „bajt”
Nie ma znaczenia, który numer dodał, dodawanie nigdy nie zawiedzie; po prostu przepełni się - w przeciwieństwie do próby przypisania stałej czasu kompilacji poza zasięgiem. –
@MarkoTopolnik To prawda, dzięki –
To jest interesujące, ale dlaczego? W kompilatorze można zobaczyć, że jest on przepełniony i może go zabronić, ale nie robi tego. –
W tym pierwszym oświadczeniu x = 128
, ponieważ zakres bajt jest 0-127
w Javie wymaga wyraźnej obsadę i stąd ten błąd kompilacji. W drugim przypadku przepełnia się i konwertuje na -25, który znajduje się w zakresie bajtów.
bajt ma zakres od -128 do 127. ten x + = 999l; działa, ponieważ jest to operator przypisania złożonego. zajrzyj tutaj possible same or alike question.
Co dokładnie próbujesz zapytać, odpowiednie bloki kodu nie mają nic wspólnego oprócz posiadania zmiennej x? – sjakubowski
Oznacza to, że x jest również bajtem w drugim przypadku. –