JLS ошибается?
Нет, JLS специфичен - различайте переменную int и «литерал int», то есть десятичный литерал типа int.
Диапазон переменной int составляет -2 147 483 648..2 147 483 647 (т. е. -(2^31)..2^31-1).
Наибольший десятичный литерал, который компилятор будет анализировать в коде Java и использовать в контексте int
, равен 2 147 483 648, но его можно использовать только как операнд унарного оператора '-', то есть вы может использовать его только одним способом - для создания самого отрицательного десятичного значения, которое может содержать int: -22147483648
.
В упомянутом вами разделе JLS раздел 3.10.1 Целочисленные литералы, где сказано:
Наибольший десятичный литерал типа int равен 2147483648 (2^31).
is также говорит несколькими строками позже:
Это ошибка времени компиляции, если десятичный литерал типа int больше 2147483648 (2 ^ 31) или если десятичный литерал 2147483648 появляется где-либо, кроме операнда унарного оператора минус.
person
Bert F
schedule
04.05.2013