Неявное приведение типов из int и double в char - PullRequest
0 голосов
/ 22 апреля 2020

char a = '1'-48; не показывает компиляцию в Blue Java версии 3.1.4, тогда как char a = '1'-48.0 показывает ошибку компиляции. Уточните.

1 Ответ

1 голос
/ 22 апреля 2020

Спецификация языка Java, глава 5.2. Контексты присваивания говорят:

Кроме того, если выражение является константным выражением ( §15.29 ) типа byte, short, char, или int:

  • Может использоваться сужающее примитивное преобразование, если переменная имеет тип byte, short или char, а значение константного выражения представимо в тип переменной.

В выражении char a = '1'-48 выражение является константным выражением типа int, поэтому присваивание допустимо.

In оператор char a = '1'-48.0, выражение является константным выражением типа double, поэтому присваивание недопустимо.

Это даже не работает для long, например, char a = '1'-48L тоже не удастся.

Приведенное выше правило, разрешающее неявное сужающее примитивное преобразование константного выражения, было добавлено в язык для упрощения присвоения константных выражений примитиву "ниже" int, поскольку все операторы неявно "повышают" значения до int , Это делается для "отмены" этого расширения до int, чтобы не допустить присвоения какого-либо константного выражения без приведения.

...