09 не распознается, где распознается 9

Я использую кварц для планирования.

TriggerUtils.getDateOf(0,40,18,09,06);

он принимает 5 параметров. (секунды, минуты, часы, дни месяца, месяц).

Когда я передаю четвертый параметр как «09». Eclipse выдает ошибку «Литерал Octal 09 (цифра 9) типа int выходит за пределы допустимого диапазона».

Но когда я передаю четвертый параметр как "9" вместо "09", он работает.

Кто-нибудь может объяснить мне эту ошибку?


person Shashi    schedule 09.06.2009    source источник
comment
Вы же понимаете, что целые числа 06 и 6 — это одно и то же?   -  person matt b    schedule 09.06.2009
comment
@matt: он передает дату в функцию и не понимает, что предшествующий 0 превращает ее в восьмеричное число.   -  person Eric    schedule 09.06.2009
comment
если я могу пройти 25, то почему бы и не 09.   -  person Shashi    schedule 09.06.2009
comment
Я думаю, что мы все были укушены этим один или два раза. Я думаю, что за 30 лет программирования я намеренно использовал восьмеричное число раз (и двоичное и шестнадцатеричное бесчисленное количество раз). Излюбленные состояния Octal — это действительно возврат.   -  person Nosredna    schedule 09.06.2009
comment
@ Шаши: 25 - это число. 0 перед числом сигнализирует о том, что вы хотите использовать восьмеричное число, поэтому вы переходите на другую систему счисления. Применяется только к 0, потому что вы обычно опускаете 0.   -  person Will Eddins    schedule 09.06.2009


Ответы (5)


В Java, если вы определяете целое число, начальный «0» будет означать, что вы определяете число в восьмеричном формате.

int i = 07; //integer defined as octal
int i = 7; // integer defined as base 10
int i = 0x07; // integer defined as hex
int i = 0b0111; // integer defined as binary (Java 7+)
person Community    schedule 09.06.2009
comment
Я не знал об 0b. Это работает и в C? - person poundifdef; 09.06.2009
comment
Префикс 0b еще не существует; это возможное расширение Java 7. - person gustafc; 09.06.2009

В восьмеричном нет 9 (то, что вы получаете с предшествующим 0). 0-7, только.

person Community    schedule 09.06.2009

Когда вы ставите перед числом 0 ("09", а не "9"), тогда Java (и C, и многие другие языки) интерпретируют число как восьмеричное с основанием 8.

«09» не является допустимым восьмеричным числом — любая отдельная цифра может быть максимум «7» (поскольку восьмеричные числа идут от 0..7).

person Community    schedule 09.06.2009

Числа, начинающиеся с нуля, обрабатываются как восьмеричные (с основанием 8) литералы, а 9 не является допустимой восьмеричной цифрой.

person Community    schedule 09.06.2009

10 — это количество цифр, а 010 — это то, что вы получите, если не будете считать большие пальцы.

person Community    schedule 09.06.2009