这两者有什么区别: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 个不同的数字
- 10000
和
- 4096
我在处理一个问题时遇到了这个问题。发生的事情是:
当我们使用它时:
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 个不同的数字
- 10000
和
- 4096