2010-07-25 19 views

cevap

18

, sadece bu dönüş false olarak değerlendirecektir

if(a instanceof A) {} 

ile yapabileceğiniz null

+5

+1 jls gösterildiği gibi aşağıdaki örneği ele alalım: Çalışma zamanında, Operatör örneğinin sonucu bu durum geçerlidir RelationalExpression değeri boş değil ve bir ClassCastException yükseltmeksizin başvuru, ReferenceType'a (§15.16) dönüştürülebilir. Aksi halde sonuç yanlıştır. http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#80289 – barrowc

+0

@barrowc pin noktaya işaret etti! – naikus

+0

'97'den beri Java programlama yapıyorum ve bu bana haber oldu. Sağol, +1! –

0

ben ciddi şüphe birinci sıfır kontrol için herhangi bir yararı olmadığını . VM'nin, instancof kontrolünü nasıl uyguladığıyla ilgili bir şey kalmadı ... olasılıklar, kodun kendisinin ilk kısmı mı?

+1

Bu VM'lere kadar değil. Onun lang spec, "boş tip" bir değeri vardır: boş başvuru. Null başvuru türü "null" tipindedir ve bu nedenle yukarıdaki kontrol kodu VM'yi uygulamak zorunda olan diğer herhangi bir tip – naikus

+0

için false değerini döndürür - ve muhtemelen ilk yaptığı şey null olup olmadığını kontrol eder - bu nedenle performans artışı yoktur. check in girişi. RESULT belirlenir. Sonuç nasıl elde edilir değil. – TofuBeer

+0

@TofuBeer Davranış * belirtildi * * * * boş olup olmadığını kontrol etmelidir. Hiçbir şekilde bir uygulamaya bağlı değildir. – EJP

2

if(a instanceof A) yeterlidir. expra boş bir NullPointerException eğer atacağım zaman

if(a!=null && expr) desen kullanılmıştır. a instanceof A bir NPE atar ve a boşsa false değerini döndürür.

4

JVM, boşluğunu kontrol etmelidir. İki kere yapmanın pek anlamı yok.

0

İşlecin boş olması durumunda, boş bir işaretçi istisnası atmadığından, instanceOf operatörünün açık null çeklere ihtiyacı yoktur.

Çalışma zamanında, ilişkisel ifadenin değeri boş değilse ve referans bir tür döküm özel durumu yükseltilmeden referans türüne dökülebilirse, instanceOf operatörünün sonucu doğrudur.

İşlenenin boş olması durumunda, instanceOf operatörü false değerini döndürür ve bu nedenle, açık boş çekler gerekli değildir.

,

public static void main(String[] args) { 
             if(a != null && a instanceof ArrayList){                     //Violation 
                  System.out.println("In if block"); 
             } 
             else 
             { 
                  System.out.println("In else block"); 
             } 
         } 

InstanceOf doğru kullanımı, aşağıdaki

public static void main(String[] args) { 
           
             if(a instanceof ArrayList){                     //Correct way 
                  System.out.println("In if block"); 
             } 
             else 
             { 
                  System.out.println("In else block"); 
             } 
         } 
İlgili konular