Java中为什么查询空字符串跟判断是否为null的时候可以不用equals?
大家讲道理
大家讲道理 2017-04-17 17:51:37
0
8
523

if(id!=null&&id!="")
代码中经常这样写,空字符串跟null 都不用equals吗?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全員に返信(8)
小葫芦

まず、id!=""の書き方が間違っています、!id.equals("")と書くべきです。
次に、==equals

の意味を理解する必要があります。
  1. == は、2 つのオブジェクトが同じオブジェクトへの参照であることを意味します。==null は、このオブジェクトがインスタンス オブジェクトへの参照ではなく、オブジェクトが空であることを意味します。

  2. equals は String クラスのメソッドで、2 つの文字列の内容が同じであることを示します。

いいねを押す +0
刘奇

いつもこのように書かれているのですが、なぜですか?

いいねを押す +0
刘奇

空の文字列には実際には等しい値が必要です。そうでない場合はエラーが発生します。 null も使用できます!=

いいねを押す +0
Peter_Zhu

次のコード、結果は false

リーリー

したがって、空の文字列を決定するには、

などの等号を使用する必要があります。 リーリー

または、長さを使用して

などの CharSequence を決定し、展開します。 リーリー
いいねを押す +0
Ty80

1. equals() クラスには、ObjectInteger などのすべてのパッケージ化クラスがこの関数を再実装しています。 classquals() メソッドの場合、このメソッドの効果は「==」と同等であり、2 つのクラスのオブジェクト参照が同じであるかどうかが判断され、ラッパー クラス Long では、オブジェクトは等しいです。 equals2. 判定が
として記述されている場合、id の値が null の場合、if(id.equals("")&&id!=null) メソッドの呼び出しを削除すると例外がスローされます。 equals()

3.

上記のプログラムを説明します

比較するのは、2 つの参照が同じかどうかです。str1 == str2 の場合、abc は定数プールに格納されます。 > は、まず定数プールに文字列 str1 があるかどうかを確認します。存在する場合は、それが直接参照されます。 str2 は新しいオブジェクトを直接作成するため、アドレスは str1 とは異なる必要があります。では、なぜ str3 メソッドを使用した後も同じなのでしょうか? abc intern メソッドが呼び出されたとき、この String オブジェクトと等しい文字列がプールに既に含まれている場合、この時点でプール内の文字列が返されます。時間が経過すると、新しい文字列は生成されなくなります。定数プール内の文字列は参照されたままであるため、
の戻り値は intern のままです。 str2.intern() == str1 trueそれだけです。 (●'◡'●)

いいねを押す +0
左手右手慢动作

id==null は、参照 ID がオブジェクトを指しておらず、単なる参照であることを意味します。Java の特定のオブジェクトのみがメソッドを呼び出すことができます (ここでは equals())。したがって、id==nullequals() をスローするときに NullPointerException を呼び出すことになります。

いいねを押す +0
Peter_Zhu

このコードは間違って書かれています。空の文字列を比較するために等号を使用していません。タブやキャリッジリターンなどの空の文字列がたくさんあります。チェックできる既製の関数がたくさんあります。 Apache Commons の StingUtils などで使用される .isBlank メソッドと Guava の Strings.isNullOrEmpty メソッドはどちらも、null 文字列と空白文字列のステータスを判断できます。

いいねを押す +0
Peter_Zhu

== と等しい、"" と null の違いは、値が等しいかどうか、または参照型のアドレスが等しいかどうかを比較することを理解する必要があります。 >equals は参照型アドレスの値、つまり内容が等しいかどうかを比較します

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート