listmodel - jlist java beispiel




Ist vor dem Aufruf von instanceof eine Nullprüfung erforderlich? (5)

Der Operator instanceof benötigt keine expliziten null Checks, da keine NullPointerException wenn der Operand null .

Zur Laufzeit ist das Ergebnis des instanceof Operators wahr, wenn der Wert des relationalen Ausdrucks nicht null und die Referenz in den Referenztyp umgewandelt werden kann, ohne dass eine Klassenausnahme ausgelöst wird.

Wenn der Operand null , gibt der Operator instanceof false und daher sind explizite Null-Überprüfungen nicht erforderlich.

Betrachten Sie das folgende Beispiel,

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

Die korrekte Verwendung von instanceof ist wie folgt:

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

Wird null instanceof SomeClass false oder eine NullPointerException ?


Nein, ist es nicht. instanceof würde false wenn der erste Operand null .


Nur als ein Leckerbissen :

Gerade ( ((A)null) instanceof A) wird false .

(Wenn das Nullen von null überraschend erscheint, müssen Sie es manchmal tun, zum Beispiel in Situationen wie dieser:

public class Test
{
  public static void test(A a)
  {
    System.out.println("a instanceof A: " + (a instanceof A));
  }

  public static void test(B b) {
    // Overloaded version. Would cause reference ambiguity (compile error)
    // if Test.a(null) was called without casting.
    // So you need to call Test.test((A)null) or Test.test((B)null).
  }
}

Also wird Test.test((A)null) a instanceof A: false Test.test((A)null) .)

PS: Wenn Sie einstellen, verwenden Sie dies bitte nicht als Vorstellungsgespräch. : D


Sehr gute Frage in der Tat. Ich habe es nur für mich selbst versucht.

public class IsInstanceOfTest {

    public static void main(final String[] args) {

        String s;

        s = "";

        System.out.println((s instanceof String));
        System.out.println(String.class.isInstance(s));

        s = null;

        System.out.println((s instanceof String));
        System.out.println(String.class.isInstance(s));
    }
}

Drucke

true
true
false
false

JLS / 15.20.2. Typ Vergleichsoperator instanceof

Zur Laufzeit ist das Ergebnis des instanceof Operators true wenn der Wert der RelationalExpression nicht null und die Referenz in den ReferenceType umgewandelt werden kann, ohne dass eine ClassCastException . Ansonsten ist das Ergebnis false .

API / Klasse # isInstance (Objekt)

Wenn dieses Klassenobjekt eine Schnittstelle darstellt, gibt diese Methode true zurück true wenn die Klasse oder eine Oberklasse des angegebenen Object Arguments diese Schnittstelle implementiert. Andernfalls wird false . Wenn dieses Class einen primitiven Typ darstellt, gibt diese Methode false .


Nein . Java literal null ist keine Instanz einer Klasse. Daher kann es keine Instanz irgendeiner Klasse sein. instanceof gibt entweder false oder true daher gibt die <referenceVariable> instanceof <SomeClass> false wenn der Wert von referenceVariable null ist.







null