Может кто-нибудь объяснить мне, почему следующий код компилируется на Java?
char c = 'a' + 10;
Почему это не эквивалентно следующему, который не компилируется?
int i = 10;
char c = 'a' + i;
Спецификация языка Java (раздел 3.10.1) гласит: "Integer литерал имеет тип long
, если он суффикс с буквой ASCII L или l (ell), в противном случае это тип int
(§4.2 0,1)". Раздел 4.2.2 относится к "Численным операторам, которые приводят к значению типа int
или long
". Таким образом, результат добавления должен, по моему мнению, быть int
, который не может быть назначен переменной char
c
.
Однако он компилируется отлично (по крайней мере, в выпуске Sun JDK 1.6.0 17 и в Eclipse Helios).
Скорее искусственный пример, возможно, но он используется во вводном курсе Java, который я преподавал, и теперь мне приходит в голову, что я действительно не понимаю, почему он работает.