为什么08不是Java中的有效整数字面值?

为什么08被认为是超出范围int,但07和以下不是?

在Java和其他几种语言中,以0开头的整数文字被解释为八进制(基数为8)的数量。

对于一位数字(除0809 ,不允许),结果是一样的,所以你可能不会注意到它们被解释为八进制。 但是,如果你写的数字有一个以上的有效数字,你可能会被结果搞糊涂了。

例如:

 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。

在大多数编程语言(如JavaC/C++ ,具有前导零的数字被解释为八进制数 。 正如我们所知,八进制数字只在07位数字内表示。 因此054这样的数字是有效的,但是像078那样的数字往往是无效的。

Java中 ,如果您定义了一个带有“0”的int,则表示您正在定义一个八进制数

int a = 08正在给出范围错误,因为在八进制中没有任何数字“8”。 八进制只提供0-7个数字。

如果你定义一个= 07,那么它不会给出范围错误,因为数字“0”和“7”在八进制范围内。