В чем разница между этими двумя: 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 разных номера

  1. 10000

а также

  1. 4096

Второе целое число в восьмеричной системе, первое в десятичной, что является причиной различия

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