Бокс после одинарной операции на Персонаже
public static void main(String[] args) {
Character x = ' ';
while (x++ < 50) {
int p = x;
}
System.out.println(x instanceof Character);
}
Потому что это унарная операция ++. x распаковывается в char и затем расширяется до int перед выполнением операции. Когда я выхожу из цикла, я получаю "истину". Я не понимаю, как можно вставить int обратно в Character; Java может разрешить упаковывать int в Integer или боксировать и расширять int на Number, Object и т. д.
1 ответ
Ответ лежит в Спецификации языка Java §15.14.2 Постфиксный Оператор Приращения ++
(Акцент мной)
Во время выполнения, если вычисление выражения операнда завершается преждевременно, тогда выражение приращения постфикса завершается преждевременно по той же причине, и приращения не происходит. В противном случае значение 1 добавляется к значению переменной, а сумма сохраняется в переменной. Перед добавлением двоичное числовое продвижение (§5.6.2) выполняется для значения 1 и значения переменной. При необходимости сумма сужается путем сужающего преобразования примитивов (§5.1.3) и / или подвергается преобразованию в бокс (§5.1.7) в тип переменной перед ее сохранением. Значением выражения приращения постфикса является значение переменной до сохранения нового значения.