2011-01-19 9 views
3

これは本当のばかな質問のように聞こえるが、私と一緒に負担してください:) かもしれないので、私は私がmsgBO.getEmpId().equals(null) == false として上記の文を作れば私の質問は、それは何の違いになるだろう、あるif ((msgBO.getEmpId().equals("") == false)) { // do something }のような私のコード内の条件ならば持っていますまたはこのように私は2つの異なることを比較しようとしていますか?ヌル比較

+1

を私はgetEmpIdを推測している()文字列を返しますか? – James

+0

こんにちはジェームズ、はいそれは文字列を返します。 – t0mcat

答えて

7

はい、""(空文字列)とnull(文字列なし)の間に大きな違いがあります。

任意のオブジェクト参照はnullを指すことができます。これは「データなし」または「何もない」を表します。空の文字列""は、長さのない文字列を表します。

この例は以下の通りである。

String one = null; 
String two = ""; 
int oneLength = one.length(); 
int twoLength = two.length(); 

lengthへの最初の呼び出しはNullPointerExceptionがスローされます。そして、2番目は0を返します。

+0

ありがとうJustin ... – t0mcat

+0

@ t0m、あなたは大歓迎です。 – jjnguy

+0

ジャスティン私の場合、mgbBO.getEmpId()== nullの場合、私は単純に行うことができます。右? – t0mcat

0

""(空の文字列)とnullは同じではありません。 String.equals(null)はtrueを返しません。

+0

ありがとうkprevas :) – t0mcat

0

nullリファレンスと長さ0の文字列は、Javaでは全く異なる2つのものです。他の二つの点:

  • getEmpIdであるいずれかのメソッド呼び出しまたは一般(この場合と悪い命名)眉をひそめている公共の場、のためにブレースが欠落ゲッター方法。
  • getEmpId場合/ nullを返している、TEHそれにequals()を呼び出すとNullPointerExceptionをcausます - リテラル文字列を比較するとき、あなたが比較を逆にすべき理由である:==を使用して明示的にブール式を比較すると、if("foo".equals(variable))
  • は醜いです。代わりに、あなたは否定を使用することができます:あなたが欲しいものをif(!msgBO.getEmpId.equals(""))またはif(!msgBO.getEmpId != null)
+0

ちょっとマイケル、getEmpIdはゲッターです。 getEmpId()。入力ミスを申し訳ありません。より良いコーディング方法を指摘してくれてありがとう。 – t0mcat

0

彼らは異なっているが、他のケース

+0

こんにちは学習は、私はあなたが、私は単にオブジェクトがこれまで... JSONの連中にそれを伝えるヌルに等しい比較することが許されないので、空の文字列 – t0mcat

0

それが違いを生むんため

msgBO.getEmpId == null 

です。

msgBO.getEmpId.equals("")null値とmsgBO.getEmpId比較空String

msgBO.getEmpId.equals(null)msgBO.getEmpIdを比較します。 がnullの場合、NullPointerExceptionをスローするため、これは間違っています。値がnullかどうかを確認する場合は、代わりにmsgBO.getEmpId == nullというような条件を使用する必要があります。

この状況で正しいのは、msgBO.getEmpIdによって返される値のタイプによって異なります。 Stringでない場合は、nullとしか比較できません。それがStringの場合、両方の値に意味がある場合があり、それはmsgBO.getEmpIdの空の値をどのように表しているかによって異なります。この場合、あなたはnullと比較する必要があり、空の値のためnullを使用している場合、あなたは空の値のため""を使用する場合は、""と比較する必要があります。

0

あなたは2つの異なることを比較しようとしています。それでも動作するかもしれませんが、空の文字列をチェックしていて、変数がnullかどうかを調べています。

も速く文字列が空であるかどうかを確認するだけで

if (string.length == 0). 

をチェックすることです(あなたは、例外が発生します文字列がnullの場合、しかし、そうはnullチェック場合はこれをしません、キャッチされた例外でnullの場合を処理しない限り)。

2

これは別のものです。

msgBO.getEmpId.equals(null) == false 

別名

!msgBO.getEmpId.equals(null) 

が常に成功することが保証され、テスト特に、(関与equals方法は、ルールの標準セットに応じて書き込まれる場合、少なくとも、)いかなる目的はこれまでないのでnullに等しいとすることができ:null以外の参照値xについて

について、x.equals(ヌル)がfalseを返すべきです。あなたが既に知っている場合

Documentation of equalsは)

だから、他の言葉では、msgBO.getEmpId != nullことを、あなたはまた、equalsへの呼び出しの結果を知っています。 msgBO.getEmpId != nullがわからない場合は、equalsに電話すると、NullPointerExceptionが発生するのを待っています。ですから、人はしばしば見ている:

msgBO.getEmpId != null && msgBO.getEmpId.equals("...stuff...") 

あるいは

"...stuff...".equals(msgBO.getEmpId) 
+0

>>の代わりにnullをチェックするために、右必要があると思います:)...と技術的に言えば、equals(Object)がtrueを返すようにすることができます。あなたは奇妙なことをすることができます/任意の不適切なimpl。 hashCode/equalsの – bestsss