:경우 (A = 널 (null) && instanceof를 A를!) ... 또는 경우 (A의 instanceof A) 다음과 같은 조건문
if (a != null && a instanceof A)
또는
if (a instanceof A)
는 장점에 대해 (거기 예를 들어 성능면에서)
null
을 먼저 확인 하시겠습니까? 두 조건 모두 결과가 동일해야합니다. A는 경우
없음 장점 무엇이든지
:경우 (A = 널 (null) && instanceof를 A를!) ... 또는 경우 (A의 instanceof A) 다음과 같은 조건문
if (a != null && a instanceof A)
또는
if (a instanceof A)
는 장점에 대해 (거기 예를 들어 성능면에서)
null
을 먼저 확인 하시겠습니까? 두 조건 모두 결과가 동일해야합니다. A는 경우
없음 장점 무엇이든지
, 당신은이
반환
false로 평가합니다
if(a instanceof A) {}
로 할 수있는 null
내가 심각하게 의심 첫 번째 널 (null) 검사에 대한 혜택이 있음 . VM이 instancof 검사를 구현하는 방법은 ... 확률은 if 자체를 코드의 첫 번째 부분으로 수행하는 것입니다.
VM이 아닌 것. 그것의 사양은 "널 타입"은 하나의 값, 즉 null 참조를 갖는다. null 참조는 "null type"타입이므로 위의 검사는 다른 유형 인 – naikus
에 대해 false를 반환합니다. VM이 코드를 구현해야합니다. 그러면 가장 먼저 null을 확인합니다. 따라서 성능 향상이 없습니다. 수표를 넣으면 RESULT가 지정됩니다. 결과가 어떻게 달성되는지는 아닙니다. – TofuBeer
@TofuBeer 동작이 * 지정됩니다. * null을 확인해야합니다. 그것은 어떤 식 으로든 구현에 달려 있지 않습니다. – EJP
if(a instanceof A)
이면 충분합니다.
은 a
이 null 인 경우 NullPointerException
을 던질 때 사용됩니다. a instanceof A
은 NPE를 던지지 않고 a
이 null 인 경우 false
을 반환합니다.
JVM 자체가 null인지 확인해야합니다. 두 번하는 것이별로 중요하지 않습니다.
instanceOf 연산자는 피연산자가 null 인 경우 널 포인터 예외를 throw하지 않기 때문에 명시 적 null 검사가 필요하지 않습니다.
런타임시 관계형 표현식의 값이 null이 아니고 클래스 캐스트 예외를 발생시키지 않고 참조가 참조 유형으로 형변환 될 수있는 경우 instanceOf 연산자의 결과는 true입니다.
피연산자가 null 인 경우 instanceOf 연산자는 false를 반환하므로 명시 적 null 검사가 필요하지 않습니다.
는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는의 올바른 사용법이 아래
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");
}
}
+1 JLS 도시 된 바와 같이 아래의 예를 고려 런시를 instanceof 연산자의 결과가있는 경우 true RelationExpression의 값이 null가 아니고, ClassCastException를 발생시키지 않고, ReferenceType에 레퍼런스를 캐스트 할 수있다 (§15.16). 그렇지 않은 경우 결과는 false입니다. http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#80289 – barrowc
@barrowc 핀이 점을 가리 킵니다. – naikus
저는 97 년 이래로 자바 프로그래밍을 해왔습니다. 고마워, +1! –