2

重複の可能性:
Java が整数が等しいことを認識しないのはなぜですか?

同じ引数から割り当てる 2 つの整数があります。

整数の 1 つで、値を 1 減らしてから、値を 1 増やします。

それらをもう一度比較すると、常に等しいとは限りません。

これは私の本からのものです。誰か説明してください。私の本の説明が理解できません。

class Test{

    public static void main(String[] args){
        Integer i = Integer.parseInt(args[0]);
        Integer j = i;
        System.out.println("1:" + i + ", j:" + j);
        i--;
        System.out.println("2:" + i + ", j:" + j);
        i++;
        System.out.println("3:" + i + ", j:" + j);
        System.out.println((i==j));

    }
}

出力: 引数として 256 を入力

1:256, j:256
2:255, j:256
3:256, j:256
false

ご検討をお願いいたします。

4

1 に答える 1

1

++-- (作成された新しいオブジェクト) のために同じではない 2 つの参照を比較しています。2 つの Integer オブジェクトを比較する方法 equals() メソッド。equals() は Integer の内部状態をチェックします。このコードを確認してください:

    Integer i = 256;
    Integer j=i;
    System.out.println(i==j);         //True  (Because we are pointing the same object)
    i--;
    i++;        
    System.out.println(i==j);         //False (Because reference has changed)
    System.out.println(i.equals(j));  //True  (Because the inner state is the same)
于 2012-09-19T20:43:52.637 に答える