Neden sınıf sınıfı yerine boş gösterici?


26

Java’da:

int count = (Integer) null;

bir java.lang.NullPointerException atar.

Bu neden programcı anlayışında kolaylık elde etmek için bir Sınıf Oyuncusu İstisnası atmıyor?

Bu istisna neden diğer istisnalar dışında seçildi?

Yanıtlar:


46

Kodunuzu çalıştırırken, Java çalışma zamanı aşağıdakileri yapar:

  1. Tamsayı sınıfındaki bir nesneye boş bırak.
  2. İntValue () yöntemini çağırarak Integer nesnesini bir int öğesinin kutusundan çıkarmayı deneyin
  3. Boş bir nesne üzerinde bir yöntem çağırmak, bir NullPointerException öğesini atar.

Başka bir deyişle, null problemsiz bir şekilde Integer'a alınabilir, fakat null bir tamsayı nesnesi int türüne dönüştürülemez.

DÜZENLE

Bir süre önce Stack Overflow'ta ilgili bir sorum vardı, buraya bakın .


1

Java başarılı bir şekilde, hiçbir nesneye başvuruda bulunmayan bir Tamsayı başvurusunu atıyor.

Sorun değil çünkü dayanıksız olmak referans için geçerli bir durum.

Gerçekleştirilemeyen mevcut olmayan bir nesnenin yönteminin çağrılmasıdır.

Oyunculuğu gerçekleştirmek (Integer)nullbir Tamsayı değişkeni bildirmekle aynıdır ve daha sonra ona yeni (veya zaten var olan) bir Tamsayı nesne örneği atamakta başarısız olur.


-1

Bir Unbox için Integerbir içine intyani içinde int i = new Integer(15);, iaslında eşittir new Integer(15).intValue() i = (Integer) o; nerede Object o = 15aynı o = Integer.valueOf(15);ama i = null; atar NullPointerExceptionçünkü io zaman null.intValue()a atar NullPointerException.


2
Neredeyse iki yıl önce kabul edilen cevap, neredeyse aynı açıklamayı sağlıyor, ancak daha açık. Bu cevap Java 5+ için de doğru değil: şimdi valueOf()boks için yeni örnekler oluşturmak yerine fabrika yöntemlerini kullanıyor .
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.