2016-10-20 13 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) 

は、Javaの以前のバージョンを使用している場合は、条件演算子を使用することができます。

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

わかりやすいように最後の文を大声で読んでください: 'a.equals(b)'が機能するためには、 'a'はnullでなければなりません(null.equals(b)のようなものはないので)。しかし、 'a'がヌルであれば、' b'もヌルであるかどうかを単にチェックします。 – 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の場合は、ブール式 –

+1

Objects.compare(null、null)が真であるように見えます。これは正直に私が期待している行動でもあります。 – KaliMa

0

これが正しいと悲しげに追加ヌル・チェックを追加する必要があります。 は、だから、どちらか

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

を書くために持っているか、あなたのコードはnull値を受け入れてはいけません。

+0

これは正しくありません。 'a!= null && a.equals(b)'が必要です。 Andyさん、ありがとうございます。 –

+0

ありがとうございました。 – wolle

0

短い方法が考えられます。

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