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

use*_*303 44 java int numbers

为什么被08认为是超出范围的int而07不是以下?

Stu*_*ook 66

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

对于单位数字(除了0809,不允许),结果是相同的,因此您可能不会注意到它们被解释为八进制.但是,如果您编写的数字超过一个有效数字,您可能会对结果感到困惑.

例如:

010 ==  8
024 == 20
Run Code Online (Sandbox Code Playgroud)

由于八进制文字通常不是你想要的,所以你应该始终注意永远不要开始使用整数文字0,除非你实际上是在尝试自己写零.

  • 另请注意,错误消息取决于基数:`0b3` - 二进制 - "二进制数必须包含至少一个二进制数字"`09` - 八进制 - "整数过大:09"`0xG` - 十六进制 - "十六进制数必须包含至少一个十六进制数字" (2认同)

cwa*_*ole 14

任何前缀为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
Run Code Online (Sandbox Code Playgroud)

有10种类型的人,那些了解三元的人,那些不了解的人,以及那些认为这是一个愚蠢的玩笑的人.


Mah*_*sam 5

Java 规范

八进制数字由 ASCII 数字 0 后跟一个或多个 ASCII 数字 0 到 7 组成,可以表示正整数、零或负整数。