Mam następujące dwie zmienne obiektowe
Date a;
Date b=null;
Zdecydowanie zarówno „a”, jak i „b” nie odnoszą się do żadnych obiektów.
Teraz, jeśli przywołam następujące oświadczenie
System.out.println(a.toString());
Wystąpi błąd czasu kompilacji, natomiast jeśli wywołam następującą instrukcję
System.out.println(b.toString());
Nie wystąpi błąd czasu kompilacji, ale wystąpi błąd czasu wykonywania. Jaki jest tego powód i jaka wartość będzie faktycznie przechowywana w „b” w celu reprezentowania wartości zerowej?
Odpowiedzi:
Dzieje się tak, ponieważ stan zmiennych lokalnych jest kontrolowany w jego zakresie
Nie dotyczy to pól
Dlaczego warto ustawić zmienną na null i użyć jej natychmiast? może to historyczny błąd, który czasami prowadzi do strasznych błędów
Jaka jest różnica semantyczna?
po prostu deklaruje zmienną, która może pomieścić odsyłającego wynika, że punkty do obiektu typu
Date
, jednakrobi dokładnie to samo, ale tym razem odwołanie wskazuje null, null jest jak każde odwołanie, zajmuje miejsce natywnego wskaźnika, czyli 4 bajty na komputerach 32-bitowych i 8 bajtów na komputerach 64-bitowych
źródło
Nie ma różnicy dla pól klas. Są
null
domyślnie dla obiektów, 0 dla wartości liczbowych ifalse
boolean.W przypadku zmiennych zadeklarowanych w metodach - Java wymaga ich inicjalizacji. Nie zainicjowanie ich powoduje błąd czasu kompilacji, gdy są dostępne.
Jaki jest powód? Pola klasy można modyfikować dowolną metodą. W dowolnej kolejności wywoływana jest metoda. Wszystkie nieprywatne pola mogą być modyfikowane przez inne klasy i / lub klasy rozszerzające tę klasę. Dlatego nie ma sensu powiadamiać o niezainicjowanej zmiennej, ponieważ można ją przypisać w wielu, wielu miejscach.
Zmienne w metodach są jednak lokalne i można je modyfikować tylko w samej metodzie. Dlatego wskazanie możliwych błędów jest zarówno możliwe, jak i racjonalne. I kompilator próbuje to zrobić. Jeśli wie, że pole nie zostało zainicjowane, wyświetli błąd, ponieważ nigdy tego nie chcesz. Jeśli nie jest to pewne - wyświetli ostrzeżenie, abyś mógł się upewnić.
źródło