だから、2つの文字列を==と比較すると、両方が同じオブジェクト/インスタンスを参照している場合にのみ真になると聞いたことがあります。それは文字列です。ブール値はどうですか?
==ブール値の完全な同等性をチェックしますか? -Java
Boolean
s(オブジェクトラッパー、大文字のB
)かboolean
s(プリミティブ、小文字のb
)のどちらであるかによって異なります。すべてのオブジェクトと同様に、Boolean
s(オブジェクトラッパー)について話している場合、==
はidentityではなく、equivalenceをチェックします。 boolean
s(プリミティブ)について話している場合、等価性をチェックします。
そう:
Boolean a, b;
a = new Boolean(false);
b = new Boolean(false);
System.out.println("a == b? " + (a == b)); // "a == b? false", because they're not the same instance
だが
boolean c, d;
c = false;
d = false;
System.out.println("c == d? " + (c == d)); // "c == d? true", because they're primitives with the same value
文字列について:
2つの文字列を==と比較すると、文字列が同一であり、両方が同じオブジェクト/インスタンスを参照している場合にのみ真になると聞いたことがあります...
それは実際には「and」ではありません:==
はonly2つのString
変数が同じString
インスタンス。もちろん、1つのString
インスタンスは1つのコンテンツセットしか持つことができないため、両方の変数が同じインスタンスを指す場合、当然コンテンツは同じになります... :-)重要な点は==
differentfalse
インスタンスのString
は、同じ文字が同じ順序である場合でも報告します。そのため、==
ではなく、equals
を使用します。 intern
ing が原因で文字列が少し混乱する可能性があります。これは文字列に固有です(Boolean
に相当するものはありませんが、Boolean.valueOf(boolean)
を使用すると、キャッシュされたオブジェクトを取得します)。また、Javaはプリミティブboolean
、int
などのようにプリミティブストリングを持たないことに注意してください。
Object use equalsがある場合、そうでない場合はこのようなことを実行できます。 (オートボクシングプリミティブのVMキャッシュ)
public static void main(String[] args){
Boolean a = true;
Boolean b = true;
System.out.println(a == b);
a = new Boolean(true);
b = new Boolean(true);
System.out.println(a == b);
}
出力はTRUEおよびFALSEです
int
、boolean
、long
のような値型について話しているのか、Integer
、Boolean
、 Long
。値型は==
と比較できますが、参照型はequals
と比較する必要があります。
ブール値で(==)を使用する場合、
オペランドの1つがブールラッパーである場合、まずブールプリミティブにボックス化解除され、2つが比較されます。
両方が「新規」キーワードで作成されたブールラッパーである場合、他のオブジェクトの場合と同様に、それらの参照が比較されます。 new Boolean("true") == new Boolean("true")
はfalse
両方が「新しい」キーワードなしで作成されたブールラッパーである場合、
Boolean a = false;
Boolean b = Boolean.FALSE;
// (a==b) return true