środa, 11 czerwca 2008

Zagadka w Javie - odpowiedź


Dziwna sprawa - nikt nie odpowiedział :P Tak jest jak nieuważnie czytacie specyfikacje Javy :P Jak ktoś nie doczytał tego posta z zagadką to jest on tutaj ;)

No to czas na poprawną odpowiedz.
Jak podałem wcześniej zapis x = x + i to nie całkiem to samo co x += i. Oczywiście obie są instrukcjami przypisania, jednak pierwsza korzysta z prostego operatora przypisania (=) a druga ze złożonego operatora przypisania (+=). Specyfikacja języka Java mówi nam, że złożone przypisanie postaci E1 op= E2,jest równoznaczne przypisaniu prostemu postaci E1 = (T)((E1) op (E2)), gdzie T to typ E1. Czyli jak widać mamy tutaj rzutowanie. Po wykonaniu obliczeń wynik jest rzutowany do typu wartości po lewej stronie operatora przypisania. Jeśli wynik jest tego samego typu co E1 to rzutowanie nie będzie miało żadnego efektu. Jeżeli natomiast typ jest szerszy niż zmiennej wtedy rzutowanie będzie chciało zawęzić typ poprzez niejawną konwersje - co spowoduje błąd.

Mam nadzieję, że to dobrze opisałem. No to teraz czas na przykład:
public class CompoundAssigmentOperatorTest {
public static void main(String[] args) {
short x = 0;
int i = 123456;

x += i; // poprawne - ukryta konwersja
x = x + i; // niepoprawne, niezgodność typów

/**
* a jak sobie rozpiszemy x += i wg wzoru
* to też będzie dobrze ! ;)
*/
x = (short)(x + i); // poprawne!

}
}
No to teraz już wszystko jasne:) Więc, spróbujcie teraz napisać takie instrukcje w których x += i zgłosi błąd, a x = x + i będzie poprawne ;)

Brak komentarzy:

Prześlij komentarz