我正在处理一个问题,然后遇到了这个。结果是:
,当我们使用这个: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:
十进制数字可以是单个ASCII数字0,表示整数0,或者由1到9的ASCII数字组成,后面可选地跟一个或多个ASCII数字0到9,中间夹杂下划线,表示正整数。
…
八进制数由一个ASCII数字0和一个或多个ASCII数字0到7组成,并以下划线分隔,可以表示正整数、零整数或负整数。
第二个是八进制整数,第一个是十进制,这就是差异的原因
将十进制文字作为参数
BigInteger.valueOf(10000)
,它将八进制文本作为参数
BigInteger.valueOf(0010000)
因为以0开头
所以你实际上传递了两个不同的数字
- 10000
和
- 4096