java == operator [duplicate]

10
задан Community 23 May 2017 в 10:26
поделиться

6 ответов

Причина, по которой вторая печать принимает истинное значение, заключается в том, что первые 128 объектов Integer кэшируются классом Integer. Вы хотите использовать. равно

14
ответ дан 3 December 2019 в 22:34
поделиться

Вы сравниваете два объекта Integer, которые с помощью оператора == сравнивают две ссылки вместо двух значений.

Используйте метод equals () , чтобы убедиться, что вы сравниваете оба значения.

1
ответ дан 3 December 2019 в 22:34
поделиться

Вы должны использовать Integer.compareTo для проверки числового равенства для Integer объектов. Оператор == сравнивает объекты, а не числа.

0
ответ дан 3 December 2019 в 22:34
поделиться

Объекты Integer автоматически упаковываются с использованием метода Integer.valueOf (int) . Взгляните на документацию по этому методу. Тогда все должно проясниться.

0
ответ дан 3 December 2019 в 22:34
поделиться

Я удивлен, что второй случай возвращает true. Но именно поэтому в Java Puzzlers советуют не смешивать использование классов Wrapper и оператора ==.

Взгляните на этот класс и код:

public class RichardInt {
    private int value;
    public RichardInt(int value) {
        this.value = value;
    }
}

Каков будет результат следующего?

RichardInt aa = new RichardInt(100);
RichardInt bb = new RichardInt(100);
System.out.println(aa == bb); // prints false

Выводится false, потому что оператор равенства == сравнивает ссылки при использовании с объектами. Помните, что в Java объекты являются ссылочными типами, а примитивы (например, int) являются типами значений. (примечание: может ли кто-нибудь сообщить мне, если я неправильно использую «тип значения»? У меня такое чувство, что это так.) Следующее будет печатать true:

RichardInt aa = new RichardInt(100);
RichardInt bb = aa;
System.out.println(aa == bb); // prints true

... поскольку aa и bb ссылаются на тот же экземпляр RichardInt.

Так что, возможно, описанное выше поведение легче понять в следующем примере...

Intger aaa = new Intger(1000);
Intger bbb = new Integer(1000);
System.out.println(aaa == bbb); // prints false

В более поздних версиях Java классы-оболочки (Integer и Float и Boolean и т. д.) могут автоматически упаковываться, то есть вы можете делать следующее:

Integer aa = 1000;
// this is a shorthand for...
// Integer aa = new Integer(1000);

Но это приводит к запутанному поведению, когда вы пытаетесь сделать что-то вроде этого:

Integer aaa = 1000;
Integer bbb = 1000;
System.out.println(aaa == bbb); // prints false

Или, что еще лучше, вы можете закончить с подобными головоломками...

// what values of x and y will result in output?
if(!(x<y)&&!(x>y)&&!(x==y)) {
    System.out.println("How is this possible?");
}

В конце концов, всякий раз, когда вы имеете дело с объектами, вы захотите использовать .equals() вместо ==.

Integer aaa = 1000;
Integer bbb = 1000;
System.out.println(aaa.equals(bbb)); // prints true
0
ответ дан 3 December 2019 в 22:34
поделиться

Вы хотите использовать aaa.equals(bbb). В Java использование == для объектов сравнивает, являются ли они одним и тем же экземпляром объекта, а не равны ли они в соответствии с их методом equals().

0
ответ дан 3 December 2019 в 22:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: