Почему нет (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 начальным нулем, нормальное десятичное число не может иметь начальный ноль

Другие вопросы по тегам