String x = (String) null;
Dlaczego nie ma wyjątku w tym stwierdzeniu?
String x = null;
System.out.println(x);
Drukuje null
. Ale .toString()
metoda powinna zgłosić wyjątek wskaźnika zerowego.
String x = (String) null;
Dlaczego nie ma wyjątku w tym stwierdzeniu?
String x = null;
System.out.println(x);
Drukuje null
. Ale .toString()
metoda powinna zgłosić wyjątek wskaźnika zerowego.
Odpowiedzi:
Możesz rzutować
null
na dowolny typ odniesienia bez żadnych wyjątków.println
Metoda nie wyrzucać pustego wskaźnika, ponieważ najpierw sprawdza, czy obiekt jest null lub nie. Jeśli jest pusty, to po prostu drukuje ciąg"null"
. W przeciwnym razie wywołatoString
metodę tego obiektu.Dodawanie dodatkowych szczegółów:
String.valueOf(object)
Metoda wywołania metody drukowania metod wewnętrznych na obiekcie wejściowym. WvalueOf
metodzie to sprawdzenie pomaga uniknąć wyjątku wskaźnika zerowego:Przez resztę zamieszania wywołanie dowolnej metody na obiekcie o wartości NULL powinno zgłosić wyjątek wskaźnika NULL, jeśli nie jest to szczególny przypadek.
źródło
Możesz rzutować
null
na dowolny typ odniesienia. Możesz także wywoływać metody, które obsługująnull
jako argument, np.System.out.println(Object)
Robi, ale nie możesz odwoływać się donull
wartości i wywoływać na niej metodę.BTW Istnieje trudna sytuacja, w której wydaje się, że można wywoływać metody statyczne na
null
wartościach.źródło
t.yield() -> Thread.yeld()
? Podobne do tego, jakfinal int i = 1; while (i == 1)
jest zoptymalizowany dowhile(true)
To jest z założenia. Możesz rzutować
null
na dowolny typ odniesienia. W przeciwnym razie nie byłoby możliwe przypisanie go do zmiennych odniesienia.źródło
Rzucanie wartości null jest wymagane w przypadku następującej konstrukcji, w której metoda jest przeciążona, a jeśli do tych przeciążonych metod zostanie przekazana wartość null, wówczas kompilator nie wie, jak usunąć niejednoznaczność, dlatego w takich przypadkach musimy wpisać typ null:
W przeciwnym razie nie można wywołać wymaganej metody.
źródło
String bar = null;
Rzutujenull
wartość naString
. Do tej pory musiałem tylko jawnie nadawać wartość NULL w teście, w którym metoda została przeciążona i chciałem przetestować jej zachowanie przy użyciu danych wejściowych NULL. Mimo to, dobrze wiedzieć, miałem zamiar napisać podobną odpowiedź, zanim znalazłem twoją.l instanceof Long
is instanceof String
wrócifalse
w tych przypadkach.Println(Object)
wykorzystujeString.valueOf()
Print(String)
sprawdza wartość zerową.źródło
Wiele odpowiedzi tutaj już wspomina
i
Zastanawiałem się, gdzie to jest określone, i sprawdziłem specyfikację Java:
Referencję zerową można zawsze przypisać lub rzutować na dowolny typ referencji (§5.2, §5.3, §5.5).
Jeśli odwołanie ma wartość null, jest konwertowane na ciąg „null” (cztery znaki ASCII n, u, l, l).
źródło
Jak napisali inni, możesz rzucić zero na wszystko. Zwykle nie potrzebujesz tego, możesz napisać:
bez umieszczania tam obsady.
Ale są sytuacje, w których takie obsady mają sens:
a) jeśli chcesz się upewnić, że wywoływana jest określona metoda, na przykład:
wtedy wpiszesz różnicę
b) jeśli zamierzasz używać swojego IDE do generowania kodu; na przykład zazwyczaj piszę testy jednostkowe, takie jak:
Robię TDD; oznacza to, że klasa „MyClassUnderTest” prawdopodobnie jeszcze nie istnieje. Zapisując ten kod, mogę następnie użyć mojego IDE do wygenerowania nowej klasy; a następnie wygenerować konstruktor akceptujący „wszystko” argument „po wyjęciu z pudełka” - IDE może stwierdzić z mojego testu, że konstruktor powinien wziąć dokładnie jeden argument typu Cokolwiek.
źródło
Drukuj :
Wartość :
Zwróci po prostu łańcuch o wartości „null”, gdy obiekt jest
null
.źródło
Jest to bardzo przydatne, gdy używa się metody, która w innym przypadku byłaby niejednoznaczna. Na przykład: JDialog ma konstruktory z następującymi podpisami:
Muszę użyć tego konstruktora, ponieważ chcę ustawić GraphicsConfiguration, ale nie mam elementu nadrzędnego dla tego okna dialogowego, więc pierwszy argument powinien być pusty. Za pomocą
jest niejednoznaczny, więc w tym przypadku mogę zawęzić wywołanie, ustawiając null na jeden z obsługiwanych typów:
źródło
Ta funkcja języka jest wygodna w tej sytuacji.
Jeśli memberHashMap.get („Nazwa”) zwraca null, nadal chcesz, aby powyższa metoda zwracała null bez zgłaszania wyjątku. Bez względu na klasę, null to null.
źródło