Этот вопрос показывает (для меня), что у вас есть фундаментальное неправильное представление о том, как работает Java, и, возможно, фундаментальное неправильное представление о целых числах в математическом смысле.
Давайте начнем с этой выдержки:
"... java интерпретирует его как 0 или интерпретирует как 000"
Это подразумевает, что вы думаете, что есть разница между "0" и "000" в математическом смысле. Ясно, что нет такой разницы. Оба являются текстовыми представлениями целочисленного нуля. Первая форма - это условное представление, а вторая - нетрадиционное представление.
Короче говоря, приведенная выше выдержка не имеет смысла в математическом смысле.
Сейчас в Java тип int
является наиболее широко используемым типом представления для математических целых чисел. И тип int
имеет одно и только одно представление для нуля.
Короче говоря, приведенная выше выдержка не имеет смысла, если мы говорим о значениях Java int
в вычислительном / поведенческом смысле.
В исходном коде Java целое число литералы записываются в виде последовательности десятичных цифр; например 0
, 1
, 42
и так далее. В этом контексте (и только в этом контексте!) Целочисленный литерал, который начинается с нуля, анализируется как восьмеричное число; т.е. база 8. Таким образом, в исходном коде Java 012
на самом деле означает число десять. Однако 000
интерпретируется как восьмеричное число: все еще ноль.
Короче говоря, приведенная выше выдержка не имеет смысла, если мы говорим о литералах в исходном коде Java.
Наконец, нам нужно разобраться с ситуацией, когда приложение Java должно преобразовывать последовательность цифр, введенных пользователем, в значение Java int
. В этом контексте преобразование обычно выполняется путем вызова Integer.parseInt(...)
или чего-то подобного. Существует две версии этого метода:
Integer.parseInt(string)
ожидает, что строка является последовательностью десятичных цифр (с необязательным знаком). Это вернет нулевое значение int
для "0"
и "000"
. Любые начальные символы 0
просто игнорируются.
Integer.parseInt(string, radix)
ожидает, что строка будет представлять собой последовательность цифр (с необязательным знаком), основание которой задается аргументом radix
. Еще раз, ведущие нули игнорируются.
Короче говоря, ведущие нули игнорируются, и поэтому "0"
и "000"
будут проанализированы как ноль int
, а различия в цитированном фрагменте не существует.