Java Int против Integer

Возможный дубликат:
Почему Java не видит, что целые числа равны?

У меня есть 2 целых числа, которые я назначаю из одного аргумента.

Одно из целых чисел я уменьшаю значение на 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

Спасибо за ваше внимание.

1 ответ

Решение

Вы сравниваете две ссылки, которые не совпадают из-за ++- (новые объекты созданы). Способ сравнения двух объектов 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)
Другие вопросы по тегам