2016-10-20 11 views
2

В Java верхний регистр Double может быть нулевым.Тестирование на равенство с удвоениями

Однако, если у меня есть парный a и b и я делаю это:

if (a.equals(b)) 

он выходит из строя, если один из них является недействительным. Есть ли лучший способ их сравнить?

+1

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

+2

«он сработает, если один из них имеет значение« null ». В частности, он выходит из строя, если' a' равно null. Не важно о 'b'. –

+1

@AndyTurner 'Objects.equals' с тех пор, как Java 7. Иначе добрые старые' null' проверки. – Mena

ответ

2

Самый простой способ в Java 7+:

Objects.equals(a, b) 

Если вы используете более раннюю версию Java, вы можете использовать условный оператор:

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

Чтение этого последнего высказывания вслух для моей собственной ясности: для 'a.equals (b)' to work, 'a' не должно быть нулевым (так как нет такой вещи, как' null.equals (b) '). Но если 'a' IS null, тогда мы просто проверяем, является ли' b' нулевым. – KaliMa

+0

@KaliMa это правильный. '(B == null)' может быть записано как '(a == b)', альтернативно, но я думаю, что это более запутанно. –

-1

Использование

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

Что делать, если a и b являются нулевыми? – KaliMa

+0

@KaliMa, тогда это было бы ложным, что логически кажется мне правильным, поскольку nulls обычно не считаются равными. Если вам нужен код для выполнения на равных значениях или когда оба равны нулю, вы можете просто добавить это как условие или условие к булевому выражению. –

+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){ 
    ... 
}