почему нет (123 == 0123) в java?

Я разрабатываю приложение в Android с помощью Eclipse. Я написал следующий код и в тестах первый и третий "Если" блок недоступен. Почему?

когда я добавляю начальный ноль к числу, оператор equal возвращает false.

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:

enter image description here

0123 base-8 = 83 decimal

0123 = (3*8^0) +(2*8^1)+(1*8^2)+(0*8^4)
     =3+16+64+0
     =83   

восьмеричное число состоит из цифры ASCII 0, за которой следует одна или несколько цифр ASCII от 0 до 7 и может представлять положительное, нулевое или отрицательное целое число.

Примечание: Восьмеричные значения обозначаются в java по ведущему нулю нормальное десятичное число не может иметь ведущий ноль