как Java интерпретирует число как 000? - PullRequest
0 голосов
/ 21 января 2012

в java, если программа видит число, подобное 000, интерпретирует ли java это как 0 или оно интерпретирует как 000? Я заметил, что мой калькулятор даже не позволяет мне вводить 000, поэтому мне интересно, вычисляет ли java также и цифры таким образом

Ответы [ 4 ]

7 голосов
/ 21 января 2012

Этот вопрос показывает (для меня), что у вас есть фундаментальное неправильное представление о том, как работает 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, а различия в цитированном фрагменте не существует.

4 голосов
/ 21 января 2012

Если вы вводите это в поле и анализируете его, оно интерпретируется как 0. Если вы вводите это как литерал в своем коде, это восьмеричное 0. Использование восьмеричных чисел в коде не является хорошей идеей, так как это их очень просто спутать.

2 голосов
/ 21 января 2012

В Java любое буквенное целое число, начинающееся с 0, интерпретируется как восьмеричное.Так что это восьмеричный 0, который, конечно, декабрь 0.

1 голос
/ 21 января 2012

Java будет интерпретироваться как 0, хотя это восьмеричная оценка. Попробуйте

int x=000; //result will be 0

, а затем

int x=012; // result will be 10 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...