等しいはずの整数があります (出力によってそれを検証します)。 しかし、私の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
この記事をご覧ください:箱入りの価値と平等
Integer
s、Long
s、Boolean
sなどのラッパー型を==
またはを使用して比較する場合!=
、参考として比較する値としてではなく。
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