Почему нет (123 == 0123) в Java?
Я разрабатываю приложение в Android, используя Eclipse. Я написал следующий код, и в тестах первый и третий блок "если" недостижим. Зачем?
Когда я добавляю начальный ноль к числу, оператор равенства возвращает ложь.
int var = 123;
if (var == 0123) {
//not reachable
}
if (var == 123) {
//reachable
}
if (var == (int)0123) {
//not reachable
}
if (var == (int)123) {
//reachable
}
3 ответа
0123
является восьмеричным числом ( ведущий 0), а 123
является десятичным числом.
поэтому 0123 на самом деле равен 83.
Любое целое число, начинающееся с нуля, является восьмеричным числом (основание 8).
0123
является восьмеричным числом и 123
является десятичным числом
0123 = (3*8^0) +(2*8^1)+(1*8^2)+(0*8^4)
=3+16+64+0
=83
Потому что 0123 в не десятичной цифре его восьмеричное (основание 8), так что это равно 83
Чтобы преобразовать число k в десятичное, используйте формулу, которая определяет его представление base-8:
0123 base-8 = 83 decimal
0123 = (3*8^0) +(2*8^1)+(1*8^2)+(0*8^4)
=3+16+64+0
=83
Восьмеричное число состоит из цифры 0 ASCII, за которой следует одна или несколько цифр ASCII от 0 до 7, и может представлять собой положительное, нулевое или отрицательное целое число.
Примечание: Восьмеричные значения обозначаются в Java начальным нулем, нормальное десятичное число не может иметь начальный ноль