Почему 08 не является допустимым целочисленным литералом в Java?
Почему 08 считается int вне диапазона, а 07 и ниже - нет?
Переведено автоматически
Ответ 1
В Java и нескольких других языках целочисленный литерал, начинающийся с 0, интерпретируется как восьмеричная величина (основание 8).
Для однозначных чисел (кроме 08 и 09, которые недопустимы) результат тот же, поэтому вы можете не заметить, что они интерпретируются как восьмеричные. Однако, если вы пишете числа с более чем одной значащей цифрой, результат может вас смутить.
Например:
010 == 8 024 == 20
Поскольку восьмеричные литералы обычно не то, что вам нужно, вы всегда должны заботиться о том, чтобы никогда не начинать целочисленный литерал с 0, если, конечно, вы на самом деле не пытаетесь записать ноль сам по себе.
Ответ 2
Любое число с префиксом 0 считается восьмеричным. В восьмеричных числах могут использоваться только цифры 0-7, точно так же, как в десятичных - 0-9, а в двоичных - 0-1.
Восьмеричная цифра состоит из цифры ASCII 0, за которой следует одна или несколько цифр ASCII от 0 до 7, и может представлять положительное, нулевое или отрицательное целое число.
Ответ 4
Начальный ноль означает, что значение в восьмеричном формате. 8 не является восьмеричной цифрой, в двоичном формате допустимо не более 2, а в шестнадцатеричном - G.