Java ではなぜ整数が等しいと認識されないのでしょうか? 質問する

Java ではなぜ整数が等しいと認識されないのでしょうか? 質問する

等しいはずの整数があります (出力によってそれを検証します)。 しかし、私のif状況では、Java はこれらの変数が同じ値を持つとは見なしません。

次のコードがあります:

if (pay[0]==point[0] && pay[1]==point[1]) {
    game.log.fine(">>>>>> the same");
} else {
    game.log.fine(">>>>>> different");
}
game.log.fine("Compare:" + pay[0] + "," + pay[1] + " -> " + point[0] + "," + point[1]);

そして、次の出力が生成されます。

FINE: >>>>>> different
FINE: Compare:: 60,145 -> 60,145

おそらく、次のように定義されていることを付け加えなければなりませんpoint:

Integer[] point = new Integer[2];

payループコンストラクタから取得したものは次のとおりです。

for (Integer[] pay : payoffs2exchanges.keySet())

したがって、これら 2 つの変数は両方とも整数型になります。

ベストアンサー1

この記事をご覧ください:箱入りの価値と平等

Integers、Longs、Booleansなどのラッパー型を==またはを使用して比較する場合!=参考として比較する値としてではなく。

2つの変数が異なるオブジェクトを指している場合、それらは==互いにたとえオブジェクトが同じ値を表していたとしても

例:==およびを使用して異なる Integer オブジェクトを比較します!=

Integer i = new Integer(10);
Integer j = new Integer(10);
System.out.println(i == j); // false
System.out.println(i != j); // true

.equals()解決策は、 …を使用して値を比較することです。

例:オブジェクトを比較するには.equals(…)

Integer i = new Integer(10);
Integer j = new Integer(10);
System.out.println(i.equals(j)); // true

…またはオペランドを明示的にアンボックス化します。

例:キャストによる強制アンボックス化:

Integer i = new Integer(10);
Integer j = new Integer(10);
System.out.println((int) i == (int) j); // true

参考文献 / 参考文献

おすすめ記事