if(id!=null&&id!="")
代码中经常这样写,空字符串跟null 都不用equals吗?
高洛峰2017-04-17 17:53:37
まず、id!=""
の書き方が間違っています、!id.equals("")
と書くべきです。
次に、==
と equals
==
は、2 つのオブジェクトが同じオブジェクトへの参照であることを意味します。==null
は、このオブジェクトがインスタンス オブジェクトへの参照ではなく、オブジェクトが空であることを意味します。
equals
は String クラスのメソッドで、2 つの文字列の内容が同じであることを示します。
天蓬老师2017-04-17 17:53:37
次のコード、結果は false
リーリーしたがって、空の文字列を決定するには、
などの等号を使用する必要があります。 リーリーまたは、長さを使用して
などの CharSequence を決定し、展開します。 リーリーPHP中文网2017-04-17 17:53:37
1. equals()
クラスには、Object
や Integer
などのすべてのパッケージ化クラスがこの関数を再実装しています。 classquals() メソッドの場合、このメソッドの効果は「==」と同等であり、2 つのクラスのオブジェクト参照が同じであるかどうかが判断され、ラッパー クラス Long
では、オブジェクトは等しいです。 equals
2. 判定が
として記述されている場合、id の値が null の場合、if(id.equals("")&&id!=null)
メソッドの呼び出しを削除すると例外がスローされます。 equals()
比較するのは、2 つの参照が同じかどうかです。str1 == str2
の場合、abc は定数プールに格納されます。 > は、まず定数プールに文字列 str1
があるかどうかを確認します。存在する場合は、それが直接参照されます。 str2 は新しいオブジェクトを直接作成するため、アドレスは str1 とは異なる必要があります。では、なぜ str3
メソッドを使用した後も同じなのでしょうか? abc
intern
メソッドが呼び出されたとき、この String オブジェクトと等しい文字列がプールに既に含まれている場合、この時点でプール内の文字列が返されます。時間が経過すると、新しい文字列は生成されなくなります。定数プール内の文字列は参照されたままであるため、
の戻り値は intern
のままです。 str2.intern() == str1
true
それだけです。 (●'◡'●)
ringa_lee2017-04-17 17:53:37
id==null
は、参照 ID がオブジェクトを指しておらず、単なる参照であることを意味します。Java の特定のオブジェクトのみがメソッドを呼び出すことができます (ここでは equals()
)。したがって、id==null
が equals()
をスローするときに NullPointerException
を呼び出すことになります。
天蓬老师2017-04-17 17:53:37
このコードは間違って書かれています。空の文字列を比較するために等号を使用していません。タブやキャリッジリターンなどの空の文字列がたくさんあります。チェックできる既製の関数がたくさんあります。 Apache Commons の StingUtils などで使用される .isBlank メソッドと Guava の Strings.isNullOrEmpty メソッドはどちらも、null 文字列と空白文字列のステータスを判断できます。
天蓬老师2017-04-17 17:53:37
== と等しい、"" と null の違いは、値が等しいかどうか、または参照型のアドレスが等しいかどうかを比較することを理解する必要があります。 >equals は参照型アドレスの値、つまり内容が等しいかどうかを比較します
。