Java - Как эти два объекта могут быть равны друг другу?

1

Привет, я пересматриваю и понимаю разницу между equals() и '==', однако этот код меня действительно смущает:

public class MyTest {
    public static void main(String[] args) {
        Integer w = new Integer(1);
        Integer x = 1;
        double z = x;
        System.out.println(z == w);
    }
}

Как двойной объект может иметь такую же ссылку, как объект Integer в памяти при использовании '=='? Не могу понять это. Спасибо за чтение!

Теги:
object
reference

3 ответа

16
Лучший ответ

Если вы сравниваете примитив и обертку с помощью == operator, то значения оболочки будут без полей и сравниваться с примитивным значением.

Из JLS 15.21.1

15.21.1. Операторы числового равенства == и! =

Если операнды оператора равенства имеют числовой тип или один из них имеет числовой тип, а другой является конвертируемым (п. 5.1.8) в числовой тип, двоичная цифровая продвижение выполняется в операндах (§5.6.2).

  • 1
    Спасибо, у меня был такой сложный вопрос при подготовке к экзамену.
  • 0
    это не правда, что ты пишешь Абимарана.
Показать ещё 5 комментариев
0

double не является ссылкой, потому что это примитивный тип. Это значение вместо этого. Double был бы ссылкой.

Когда вы пишете z == w, где z является double -typed, а w является Integer -typed, время выполнения определенно должно что-то сравнивать. И, очевидно, он должен сравнивать вещи одного и того же типа. Он не будет сравнивать double значение с ссылкой Integer. Вместо этого он будет распаковать Integer и будет сравнивать значение int полученное после распаковки, с double значением. Оба они равны 1, логический оператор вернет true.

0

Здесь объекты не сравниваются, а primitive типы сравниваются с feature unboxing для Integer.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню