31

したがって、2 つの文字列を == で比較すると、両方が同じオブジェクト/インスタンスを参照している場合にのみ true が返されると聞いたことがあります。それが弦です。ブール値はどうですか?

4

4 に答える 4

54

== はブール値の完全な等価性をチェックしますか? - ジャワ

Booleans (オブジェクト ラッパー、大文字に注意B) またはbooleans (プリミティブ、小文字に注意)について話しているかによって異なりますbBooleans (オブジェクト ラッパー)について話している場合、すべてのオブジェクトと同様に、 equivalenceではなくidentity==をチェックします。s (プリミティブ)について話している場合は、等価性がチェックされます。boolean

そう:

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 つの文字列を == で比較すると、文字列が同一で、両方が同じオブジェクト/インスタンスを参照している場合にのみ true が返されると聞いたことがあります...

実際には「and」ではありません==。2つの変数が同じインスタンスを参照しているかどうかのみをチェックします。もちろん、1 つのインスタンスは 1 セットのコンテンツしか持てないため、両方の変数が同じインスタンスを指している場合、当然、コンテンツは同じです... :-) 重要な点はたとえそれらが同じ文字を同じ順序で。そのため、 ではなくを使用します。文字列に固有のingのため、文字列は少し混乱する可能性があります ( に相当するものはありませんが、 を使用すると、キャッシュされたオブジェクトが取得されます)。また、Java にはプリミティブのようなプリミティブ文字列がないことに注意してください。StringStringString==false Stringequals==internBooleanBoolean.valueOf(boolean)booleanintなど

于 2012-06-17T16:22:38.763 に答える
4

オブジェクトが 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です

于 2014-11-18T13:54:19.087 に答える
1

int、のような値型について話しているかbooleanlong参照型についてInteger話しているかBooleanによって異なりますLong。値型は と比較できますが==、参照型は と比較する必要がありますequals

于 2012-06-17T16:23:25.593 に答える