Распаковка значения 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.