почему нет (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:
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 по ведущему нулю нормальное десятичное число не может иметь ведущий ноль