윌 null instanceof SomeClass
반환 false
또는 던져 NullPointerException
?
답변
아니요, instanceof를 사용하기 전에 null 검사가 필요하지 않습니다.
표현식 x instanceof SomeClass
은 false
if x
입니다 null
.
Java 언어 사양, 섹션 15.20.2, “유형 비교 연산자 instanceof”에서 :
“런타임에서
instanceof
연산자 의 결과
true
는 RelationalExpression 의 값 이 아닌null
경우 참조는
을 올리지 않고 ReferenceType 으로 캐스트 할 수 있습니다ClassCastException
. 그렇지 않으면 결과는false
” 입니다 . “
따라서 피연산자가 널이면 결과는 false입니다.
답변
instanceof
반환 할 첫 번째 피연산자로 null 참조를 사용 합니다 false
.
답변
정말 좋은 질문입니다. 방금 시도했습니다.
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
런타임시
instanceof
연산자 의 결과true
는 RelationalExpression 의 값 이 아니고 참조를 을 올리지 않고 ReferenceTypenull
으로 캐스트 할 수있는 경우 입니다. 그렇지 않으면 결과는 입니다.ClassCastException
false
이
Class
객체가 인터페이스를 나타내는 경우,이 메소드는true
, 지정된Object
인수 의 클래스 또는 슈퍼 클래스 가이 인터페이스를 구현 하고있는 경우를 돌려줍니다 .false
그렇지 않으면 반환 합니다. 이Class
객체가 원시적 형을 나타내는 경우 ,이 메소드는를 리턴합니다false
.
답변
아뇨. 첫 번째 피연산자가 인 경우 instanceof
반환 false
됩니다 null
.
답변
깔끔한 것처럼 :
심지어 돌아올 것이다 .(
((A)null)
instanceof A)
false
(유형 캐스팅 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
.)
추신 : 고용하는 경우, 이것을 면접 질문으로 사용하지 마십시오. :디
답변
없음 . Java 리터럴 null
은 어떤 클래스의 인스턴스도 아닙니다. 따라서 클래스 의 인스턴스가 될 수 없습니다 . instanceof
중 반환 false
또는true
때문에 <referenceVariable> instanceof <SomeClass>
반환 false
할 때 referenceVariable
값이 null입니다.
답변
instanceof
운영자는 명시 적으로 필요하지 않습니다 null
그것은 포기하지 않는 한, 검사를 NullPointerException
피연산자 인 경우 null
.
런타임시, instanceof
관계식의 값이 아니고 null
클래스 캐스트 예외를 발생시키지 않고 참조를 참조 유형으로 캐스트 할 수있는 경우 연산자 결과 는 true 입니다.
피연산자가 null
이면 instanceof
연산자가 반환 false
되므로 명시적인 null 검사가 필요하지 않습니다.
아래 예를 고려하십시오.
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");
}
}
올바른 사용법은 instanceof
다음과 같습니다.
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");
}
}