Распаковка значения int с использованием класса Integer

В этом случае, каково значение переменной y после первых двух заявлений? Я предполагаю, что это целое число 7, но моя книга говорит automatic unboxing объектов происходит только с реляционными операторами < >". Я немного запутался, как переменная Integer y получает это значение. Есть ли какие-либо unboxing происходят в newInteger(x)?

Integer x = 7;
Integer y = new Integer(x); 

println( "x == y" + " is " +  (x == y))

2 ответа

Решение
Integer x = 7;

В этом случае int литерал 7 автоматически помещается в Integer переменная x,

Integer y = new Integer(x);

Это включает автоматическую распаковку Integer переменная x в int (временная) переменная, которая передается Integer конструктор. Другими словами, это эквивалентно:

Integer y = new Integer(x.intValue());

После этого заявления y указывает на новый объект, который отличается от x но содержащий то же самое int обернутое значение.

Распаковка происходит, когда компилятор уверен, что вы хотите сравнить значения. С помощью == можно сравнить Objects и, следовательно, дать false так как == является допустимой операцией между объектами. С < а также > нет понятия Object < OtherObject так что наверняка вы имеете в виду численно.

public void test() {
    Integer x = 7;
    Integer y = new Integer(x) + 1;

    System.out.println("x == y" + " is " + (x == y));
    System.out.println("x.intValue() == y.intValue()" + " is " + (x.intValue() == y.intValue()));
    System.out.println("x < y" + " is " + (x < y));
    System.out.println("x.intValue() < y.intValue()" + " is " + (x.intValue() < y.intValue()));
}

х == у ложно

x.intValue() == y.intValue() имеет значение true

х <у верно

x.intValue ()


В этом случае каково значение переменной y после первых двух утверждений?

Значение переменной y является ссылкой на объект Integer, содержащий значение 7.

Другие вопросы по тегам