6

私のコードは次のとおりです。

public class Box
{
  public static void main(String[] args)
  {
     Integer z = new Integer(43);
     z++;

     Integer h = new Integer(44);

     System.out.println("z == h -> " + (h == z ));
  }
}

出力:-

z == h -> false

両方のオブジェクトの値が等しいのに、出力が false になるのはなぜですか?

オブジェクトを等しくする他の方法はありますか?

4

7 に答える 7

6

いいえ。h.equals(z)代わりにを使用h == zして、期待する等価動作を取得します。

于 2013-02-09T07:41:42.160 に答える
3

h == z自動ボクシング (つまりInteger a = 43) を介して値を割り当て、値が -128 と 127 (キャッシュされた値) の間である場合にのみ機能します。

 Integer a = 44;
 Integer b = 44;

 System.out.println("a == b -> " + (a == b));

出力:

a == b -> true

値が範囲外の場合は[-128, 127]戻りますfalse

 Integer a = 1000;
 Integer b = 1000;

 System.out.println("a == b -> " + (a == b));

出力:

a == b -> false

ただし、2 つのオブジェクトを比較する正しい方法は、Integer.equals()メソッドを使用することです。

于 2013-02-09T07:48:41.877 に答える
2

Integerオブジェクトはプリミティブではありません (int) そして、オブジェクトの等価性はequalsメソッドと比較します。

これを行うと、両方の参照 (z と h) が同じ参照を参照しているかどうかをチェックしない限り、値z == hにボックス化解除されません。intInteger

ドキュメントで導出されているように-

引数が null ではなく、このオブジェクトと同じ int 値を含む Integer オブジェクトである場合にのみ、結果は true になります。

System.out.println("z == h -> " + h.equals( z));

印刷されますtrue

于 2013-02-09T07:41:19.460 に答える
1

整数はオブジェクトであり、プリミティブではありません。z & h がプリミティブの場合、 == は問題なく機能します。オブジェクトを扱う場合、== 演算子は等価性をチェックしません。2 つの参照が同じオブジェクトを指しているかどうかをチェックします。

そのため、z.equals(h);or h.equals(z);These を使用すると true が返されます。

于 2013-02-09T07:45:24.380 に答える
1

値ではなく、2 つの異なるオブジェクトを比較しようとしています。z と h は、同じ値を保持する 2 つの異なる Integer オブジェクトを指します。

z == h 

2 つのオブジェクトが等しいかどうかを確認します。したがって、false が返されます。

Integer オブジェクトによって格納された値を比較する場合は、equalsメソッドを使用します。


Integer z = new Integer(43);   // Object1  is created with value as 43.
z++;                           // Now object1 holds 44.

Integer h = new Integer(44); // Object2 is created with value as 44.

したがって、最後に、値が 44 の object1 と object2 という 2 つの異なる整数オブジェクトがあります。

z = h

これは、z と h が指すオブジェクトが同じかどうかをチェックします。つまりobject1 == object2 、どちらが間違っていますか。もしあなたがそうするなら

Integer z = new Integer(43);   // Object1  is created with value as 43.
z++;                           // Now object1 holds 44. Z pointing to Object1

Integer h = z;                 // Now h is pointing to same object as z.

z == h  

true を返します。

これは役立つかもしれませんhttp://www.programmerinterview.com/index.php/java-questions/java-whats-the-difference-between-equals-and/

于 2013-02-09T08:03:38.807 に答える
1

これを読んでください:http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Integer.html

整数は、値ではなくオブジェクトのアドレス/参照/ポインターを比較するオブジェクトです。

Integer a = Integer(1);
Integer b = Integer(1);

a == b; // false
a.compareTo(b); // true
于 2013-02-09T08:09:00.570 に答える
0

Integer オブジェクトで z++ を使用できることを確認してください。

于 2013-02-09T07:43:44.050 に答える