这两者有什么区别:BigInteger.valueOf(10000) 和 BigInteger.valueOf(0010000)?

Whats difference between this two: BigInteger.valueOf(10000) and BigInteger.valueOf(0010000)?

我在处理一个问题时遇到了这个问题。发生的事情是:

当我们使用它时: BigInteger.valueOf(10000) 它给出 10000

的值

但是

当我们使用这个 BigInteger.valueOf(0010000) 时,它给出 4096

的值

两者有什么区别?

第二个是八进制整数,第一个是十进制,这是不同的原因

0010000 是一个八进制文字。这与 BigInteger 无关 - 它只是 Java 整数文字 (JLS 3.10.1):

System.out.println(10000);   // 10000
System.out.println(0010000); // 4096

来自 JLS:

A decimal numeral is either the single ASCII digit 0, representing the integer zero, or consists of an ASCII digit from 1 to 9 optionally followed by one or more ASCII digits from 0 to 9 interspersed with underscores, representing a positive integer.

...

An octal numeral consists of an ASCII digit 0 followed by one or more of the ASCII digits 0 through 7 interspersed with underscores, and can represent a positive, zero, or negative integer.

这是以十进制字面量为参数

BigInteger.valueOf(10000) 

这是将八进制文字作为参数

BigInteger.valueOf(0010000) because begins with 0

所以你在技术上传递了 2 个不同的数字

  1. 10000

  1. 4096