Может кто-нибудь объяснить мне, почему следующий код компилируется на 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, который я преподавал, и теперь мне приходит в голову, что я действительно не понимаю, почему он работает.