为什么 08 在 Java 中不是有效的整数文字?
为什么 08
被认为是超出范围的 int,而 07
及以下则不是?
Why is 08
considered an out of range int but 07
and below are not?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
为什么 08
被认为是超出范围的 int,而 07
及以下则不是?
Why is 08
considered an out of range int but 07
and below are not?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
在 Java 和其他几种语言中,以
0
开头的整数文字被解释为八进制(以 8 为基数)数量。对于单位数字(
08
和09
除外,这是不允许的),结果是相同的,因此您可能没有注意到它们被解释为八进制。但是,如果您编写的数字具有超过一位有效数字,您可能会对结果感到困惑。例如:
由于八进制文字通常不是您想要的,因此您应该始终注意不要以
0
开始整数文字,除非您实际上尝试自己写入零。In Java and several other languages, an integer literal beginning with
0
is interpreted as an octal (base 8) quantity.For single-digit numbers (other than
08
and09
, which are not allowed), the result is the same, so you might not notice that they are being interpreted as octal. However, if you write numbers with more than one significant digit you might be confused by the result.For example:
Since octal literals are usually not what you want, you should always take care to never begin an integer literal with
0
, unless of course you are actually trying to write zero by itself.任何以 0 为前缀的数字都被视为八进制。八进制只能使用数字0-7,就像十进制可以使用0-9,二进制可以使用0-1一样。
Any number prefixed with a 0 is considered octal. Octal numbers can only use digits 0-7, just like decimal can use 0-9, and binary can use 0-1.
来自 Java 规范:
From the Java specification:
前导零表示该值是八进制的。 8 不是八进制数字,二进制数不超过 2 个,十六进制数 G 有效。
Leading zero means the value is in octal. 8 is not an octal digit, no more than 2 is valid in binary or G is valid in hexadecimal.
在Java中,如果您定义一个以“0”开头的int,则表示您正在定义八进制中的数字。
int a = 08 给出超出范围的错误,因为八进制中没有任何数字“8”。 八进制仅提供 0-7 数字。
如果您定义a = 07,那么它不会给出超出范围的错误,因为数字“0”和“7”在八进制的范围内。
In Java, if you are defining an int with a leading '0' denotes that you are defining a number in Octal.
int a = 08 is giving out of range error because there is no any number '8' in Octal. Octal provides 0-7 numbers only.
If you define a = 07 then it's not giving out of range error because the numbers '0' and '7' are within the Octal's range.
在大多数编程语言中,例如 Java 和 C/C++,带有前导零的数字被解释为 八进制数。我们知道八进制数只能表示
0
到7
数字。因此,像05
、03
、054
这样的数字是有效的,但像078
、0348
这样的数字是有效的。 code>、09
、08
往往无效。In most of programming language like
Java
andC/C++
, the number with leading zero are interpreted as octal number. As we know octal numbers are only represented within0
to7
digits only. Hence numbers like05
,03
,054
are valid but the numbers like078
,0348
,09
,08
are tends to invalid.