为什么08不是Java中的有效整数字面值?
为什么08
被认为是超出范围int,但07
和以下不是?
在Java和其他几种语言中,以0
开头的整数文字被解释为八进制(基数为8)的数量。
对于一位数字(除08
和09
,不允许),结果是一样的,所以你可能不会注意到它们被解释为八进制。 但是,如果你写的数字有一个以上的有效数字,你可能会被结果搞糊涂了。
例如:
010 == 8 024 == 20
由于八进制文字通常不是你想要的,所以你应该小心,永远不要开始一个整数字面值为0
,除非你自己实际上是在写零。
任何以0开头的数字都被认为是八进制数。 八进制数只能使用数字0-7,就像十进制可以使用0-9,而二进制可以使用0-1。
// octal to decimal 01 // 1 02 // 2 07 // 7 010 // 8 020 // 16 // octal to binary (excluding most significant bit) 01 // 1 02 // 10 07 // 111 010 // 1000 020 // 10000
有十种types的人,懂三元的人,不懂的,认为这是一个愚蠢的笑话。
从Java规范 :
一个八进制数字由一个ASCII数字0和一个或多个ASCII数字0到7组成,可以表示正整数,零整数或负整数。
前导零表示该值是八进制的。 8不是八进制数字,二进制不超过2有效,G有效hex。
在大多数编程语言(如Java
和C/C++
,具有前导零的数字被解释为八进制数 。 正如我们所知,八进制数字只在0
到7
位数字内表示。 因此054
这样的数字是有效的,但是像078
那样的数字往往是无效的。
在Java中 ,如果您定义了一个带有“0”的int,则表示您正在定义一个八进制数 。
int a = 08正在给出范围错误,因为在八进制中没有任何数字“8”。 八进制只提供0-7个数字。
如果你定义一个= 07,那么它不会给出范围错误,因为数字“0”和“7”在八进制范围内。