Печать целого числа в java с нулем перед ним

class test{
  public static void main(String args[]){
     int a = 011;
     System.out.println(a);
  }
}
Выход

равен 9?

почему я получаю 9 как результат вместо 011. Может кто-то объяснить мне процесс, стоящий за этим. Почему я получаю 9? что это? Как я могу получить вывод как 011.

Спасибо!

Ответы

Ответ 1

JLS 3.10.1 описывает четыре способа определения целых чисел.

Integer литерал может быть выражен в десятичной (база 10), шестнадцатеричной (базовая 16), восьмеричной (база 8) или двоичный (база 2).

Октальная цифра состоит из цифры 0, за которой следуют одна или несколько цифр от 0 до 7...

Десятичная цифра представляет собой либо цифру 0, представляющую целое число, либо состоящую из цифры от 1 до 9, а затем одну или несколько цифр от 0 до 9...

В заключение, если ваш целочисленный литерал (т.е. 011) начинается с 0, тогда java примет его восьмеричную нотацию .

пример восьмеричного преобразования

Решение:

Если вы хотите, чтобы ваше целое число удерживало значение 11, тогда не представляйте себе фантазию, просто назначьте 11. В конце концов, нотация ничего не изменит для значения. Я имею в виду, с математической точки зрения, 11 = 011 = 11,0.

int a = 11;

Форматирование имеет значение только при печати (или при преобразовании int в String).

String with3digits = String.format("%03d", a);
System.out.println(with3digits);

Форматирование "%03d" используется для добавления ведущих нулей.

formatter

В качестве альтернативы вы можете сделать это в 1 строке, используя метод printf.

System.out.printf("%03d", a);

Ответ 2

Числовой литерал, начинающийся с 0, анализируется как восьмеричное число (т.е. основание 8). 011 равно 9 в восьмеричном.

Ответ 3

011 интерпретируется как восьмеричное число. Это означает, что он находится в базе 8. См. Также этот пост SO.. Из принятого ответа Стюарта Кука:

В Java и некоторых других языках целочисленный литерал, начинающийся с 0, интерпретируется как восьмеричная (базовая 8) величина.

Цифры в базе 10:
100s, 10s, 1s

Цифры в базе 8:
64s, 8s, 1s

Итак, 011 интерпретируется как 8 + 1 = 9