В чем разница между этими двумя: BigInteger.valueOf(10000) и BigInteger.valueOf(0010000)?
Я работал с одной проблемой и столкнулся с этим. Что происходит, это:
когда мы используем это:BigInteger.valueOf(10000)
это дает значение 10000
Но
когда мы используем это BigInteger.valueOf(0010000)
это дает значение 4096
Какая разница между этими двумя?
3 ответа
0010000 является восьмеричным буквальным. Это не имеет ничего общего с BigInteger
- это просто целочисленные литералы Java ( JLS 3.10.1):
System.out.println(10000); // 10000
System.out.println(0010000); // 4096
Из JLS:
Десятичная цифра - это либо одна цифра ASCII 0, представляющая целое число ноль, либо она состоит из цифры ASCII от 1 до 9, за которой могут следовать одна или несколько цифр ASCII от 0 до 9 с вкраплениями подчеркивания, представляющих положительное целое число.
...
Восьмеричное число состоит из цифры 0 ASCII, за которой следует одна или несколько цифр ASCII от 0 до 7 с вкраплениями подчеркивания, и может представлять собой положительное, нулевое или отрицательное целое число.
Это принимает десятичный литерал в качестве параметра
BigInteger.valueOf(10000)
и это принимает восьмеричный литерал в качестве параметра
BigInteger.valueOf(0010000)
потому что начинается с 0
так что вы технически проходите 2 разных номера
- 10000
а также
- 4096
Второе целое число в восьмеричной системе, первое в десятичной, что является причиной различия