Бокс после одинарной операции на Персонаже

  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) в тип переменной перед ее сохранением. Значением выражения приращения постфикса является значение переменной до сохранения нового значения.

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