2016-10-20 3 views
2

Java에서 대문자 Double은 null 일 수 있습니다.두배로 동등성 검사

그러나 나는 복식 ab이 있다면 나는이 작업을 수행 :

if (a.equals(b)) 

그 중 하나가 null의 경우는 충돌합니다. 그들을 비교할 수있는 더 좋은 방법이 있습니까?

+1

'Objects.equals (a, b)'. –

+2

"둘 중 하나가 null 인 경우 충돌합니다."특히 a가 null이면 충돌합니다. 'b'에 대해서는 중요하지 않습니다. –

+1

Java 7부터 @AndyTurner'Objects.equals'. 그렇지 않으면 좋은 오래된'null' 검사. – Mena

답변

2

자바 7+에서 가장 간단한 방법은 다음과 같습니다

Objects.equals(a, b) 

자바의 이전 버전을 사용하는 경우, 당신은 조건 연산자를 사용할 수 있습니다 :

(a != null) ? a.equals(b) : (b == null) 
+0

내 자신의 명확성을 위해 마지막 문장을 크게 읽음 :'a.equals (b)'가 작동하려면'a'는 null이 아니어야합니다 (null.equals (b)와 같은 것이 없으므로). 그러나'a'가 null이면'b'가 null인지 단순히 확인합니다. – KaliMa

+0

@KaliMa 맞습니다. '(b == null)'은'(a == b)'로 쓰여질 수도 있지만, 혼란 스럽다. –

-1

사용

if (null != a && null != b && a.compareTo(b) == 0) { 
    // whatever goes here 
} 
+0

a와 b가 null 인 경우는 어떻게됩니까? – KaliMa

+0

@KaliMa 그렇다면 null이 일반적으로 동등한 것으로 간주되지 않으므로 논리적으로 나에게 맞는 것처럼 보이는 것은 거짓 일 것입니다. 같은 값으로 실행하는 코드가 필요하거나 둘 다 null 인 경우 부울 식 –

+1

Objects.compare (null, null)이 true로 표시 될 수 있습니다. 그것은 또한 정직하게 기대하는 행동입니다 – KaliMa

0

이 정확하고 슬프게도 추가 널 검사를 추가해야합니다. 그래서 당신도

if ((a != null && a.equals(b)) || (a == null && b == null)) 

를 작성해야하거나 코드는 null 값을 허용하지 않아야합니다.

+0

올바르지 않습니다. 'a! = null && a.equals (b)'가 필요합니다. 앤디가 편집했습니다. –

+0

감사합니다. – wolle

0

간단한 방법이 될 수있다 :

boolean c = (a != null && b != null) ? a.equals(b) : false; 
if (c){ 
    ... 
}