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