Как происходит сравнение в приведенном ниже коде

public class Application {
    public static void main(String[] args) {
        Integer a = new Integer(10);
        Integer b = new Integer(10);
        int x = new Integer(10);
        int y = new Integer(10);
        int p = 10;
        int q = 10;

        System.out.println(a == b);
        System.out.println(a == x);
        System.out.println(x == p);
        System.out.println(b == q);
        System.out.println(y == q);
        System.out.println(x == y);

    }
}

Приведенный выше код производит вывод:

false
true
true
true
true
true
  1. Пожалуйста, объясните процесс сравнения примитивного типа со ссылочным типом, используя == ?
  2. как int x = новое целое число (10); пройти внутреннюю оценку?

person Eddy    schedule 22.07.2015    source источник
comment
Вам может быть интересно сравнить примитивный тип со значением Object, но не с объектом.   -  person joey rohan    schedule 22.07.2015
comment
docs.oracle.com/javase/tutorial/java/data/autoboxing. html   -  person Cratylus    schedule 22.07.2015
comment
Точно, сэр, моя цель состоит в том, чтобы прояснить мою концепцию о том, как примитивные типы сравниваются со значением объекта, а также о том, какое значение содержит b и как работает распаковка, когда b сравнивается с q.   -  person Eddy    schedule 22.07.2015
comment
Вы можете изучить это. Самый верхний блок под названием «Тропы», охватывающий основы.   -  person Turing85    schedule 22.07.2015
comment
Почему вы создаете один и тот же вопрос дважды? Разве предоставленная дублирующаяся ссылка не была ясной в его ответах?   -  person Tom    schedule 23.07.2015
comment
нет, в предыдущем посте @Tom было непонятно, а тут действительно стало ясно   -  person Eddy    schedule 23.07.2015
comment
Затем вы должны отредактировать свой вопрос, чтобы объяснить, почему он либо не является дубликатом, либо что еще неясно. Просто заметка на следующий раз.   -  person Tom    schedule 23.07.2015


Ответы (3)


Integer a = new Integer(10);
Integer b = new Integer(10);

a==b ---> Ссылочная переменная a сравнивается со ссылочной переменной b. Не тот объект, на который они указывают. И эти две ссылочные переменные действительно разные. Значит, ложно. Используйте .equals() для сравнения объектов.

a==x ---> автоматическая распаковка. x содержит значение 10. при сравнении Integer сравнивается с int. Когда оболочка сравнивается с примитивом, происходит автоматическая распаковка. a становится int. Итак, фактически 10 сравнивается с 10. Следовательно, верно.

x==p,b==q,y==q,x==y --> То же самое. Автораспаковка, вступление в силу. Значит все верно.

Всякий раз, когда Java сравнивает переменную класса-оболочки с примитивной переменной, она распаковывает переменную класса-оболочки в примитив, а затем сравнивает их.

Скомпилируйте это с помощью SDK, предшествующего Java 5, и я сомневаюсь, что он вообще скомпилируется. Java представила эту функцию из Java 5. Если я правильно помню..

person Samrat Dutta    schedule 22.07.2015

Когда вы сравниваете примитив int с его классом-оболочкой Integer, оболочка равна unboxed своему примитивному значению. Вот почему вы получаете истину всегда, кроме первого условия.

В первом условии вы проверяете ссылочное равенство двух разных объектов, что, очевидно, будет ложным.

person Renjith    schedule 22.07.2015
comment
thnx 4 d ответ, это было полезно - person Eddy; 22.07.2015

== для классов сравнивает ссылки. Когда вы создаете 2 объекта с одинаковыми значениями, вы должны использовать .equals(), потому что 2 объекта, созданные с помощью new, будут иметь разные ссылки. При использовании int он сравнивает значения, потому что они являются примитивами, а передача new Integer() в int создает примитив int.

person cbender    schedule 22.07.2015