Подтвердить что ты не робот

Почему значение 09 слишком велико для целого числа?

Они думают, что это:

Возможный дубликат:
Целое число с ведущими нулями

Но если вы проверите Целое число с ведущими нулями, вы обнаружите, что задан вопрос о том, до запуска jdk7 и, следовательно, он имеет более низкие исследовательские усилия. Но в jdk7 есть некоторое изменение и дополнение к целым числам. Вот ответы, которые в настоящее время охватывают jdk7.

У меня есть код:

class Test{
    public static void main(String[] args){
        int x=09;
        System.out.println(x);
    }
}

При компиляции она дает ошибку: целое число слишком велико: 09

Почему это так?

Опять же, если я изменил код на:

class Test{
    public static void main(String[] args){
        int x=012;
        System.out.println(x);
    }
}

Теперь на выходе 10

Почему он дает результат 10 вместо 12?

4b9b3361

Ответ 1

Числа, начинающиеся с 0, считаются octal - и 9 не является восьмеричной цифрой (но (условно) 0-7).


Шестнадцатеричные литералы начинаются с 0x, например. 0xA.


До Java 6 не было литерала для бинарных и вам придется использовать что-то вроде

int a = Integer.parseInt("1011011", 2);

где второй аргумент указывает желаемую базу.


В Java 7 теперь есть бинарные литералы.

В Java SE 7 интегральные типы (байт, короткий, int и long) также могут быть выражены с использованием системы двоичных чисел. Чтобы указать бинарный литерал, добавьте префикс 0b или 0b к номеру.

Ответ 2

Целочисленные литералы, начинающиеся с "0", рассматриваются как восьмеричные. Допустимые цифры: от 0 до 7.

Ответ 3

Целые числа, начинающиеся с цифры 0, являются восьмеричными (базовыми 8) числами. Самая большая восьмеричная цифра - 7; после 07 приходит 010 (что равно десятичному 8!)

012 (восьмеричное двенадцать) равно 010 (восьмеричная десятичная цифра 8) плюс 2 или десятичная 10.

Ответ 4

09 - восьмеричный числовой литерал, но недействительный.

Шестнадцатеричные числа начинаются с 0x, например 0xFFFF.

В Java не было бинарного литерала. Java 7 поддерживает их, начиная с 0b, например, 0b00100001.