java - 자바 int 형 null 체크




instanceof를 호출하기 전에 null 검사가 필요합니까? (5)

null instanceof SomeClass false 돌려 null instanceof SomeClass , NullPointerException throw합니까?


그냥 맛있는 음식 처럼 :

심지어 ( ((A)null) instanceof A)false 를 반환합니다.

(typecasting null 이 놀라운 경우, 때때로 다음과 같은 상황에서이를 수행해야합니다.

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.test(null) was called without casting.
    // So you need to call Test.test((A)null) or Test.test((B)null).
  }
}

따라서 Test.test((A)null)a instanceof A: false 출력 a instanceof A: false .

추신 : 고용하려는 경우 취업 면접 질문으로 사용하지 마십시오. :디


아니, 그렇지 않아. 첫 번째 피연산자가 null 경우 instanceoffalse 반환합니다.


정말로 좋은 질문입니다. 나는 방금 나 자신을 위해 노력했다.

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));
    }
}

인쇄물

true
true
false
false

JLS / 15.20.2. 형식 비교 연산자 instanceof

런타임시 RelationalExpression 값이 null 이 아니고 reference가 ClassCastException 을 발생시키지 않고 ReferenceType으로 변환 될 수있는 경우 instanceof 연산자의 결과는 true 입니다. 그렇지 않은 경우 결과는 false 입니다.

API / 클래스 # isInstance (Object)

Class 객체가 인터페이스를 나타내는 경우, 지정된 Object 인수의 클래스 또는 슈퍼 클래스가이 인터페이스를 구현하는 경우,이 메소드는 true 리턴 true . 그렇지 않으면 false 리턴합니다. 이 Class 객체가 기본 유형을 나타내는 경우이 메서드는 false 반환합니다.


instanceof 대한 첫 번째 피연산자로 null 참조를 사용하면 false 반환됩니다.


아니 . Java 리터럴 null 은 어떤 클래스의 인스턴스도 아닙니다. 따라서 모든 클래스의 인스턴스가 될 수 없습니다. instanceof false 또는 true 반환 하므로 referenceVariable 값이 null 인 경우 <referenceVariable> instanceof <SomeClass>false 반환합니다.







null