首页 > Java > java教程 > 为什么 Java 中 `0123` 打印出 `83`,而 `123` 打印出 `123`?

为什么 Java 中 `0123` 打印出 `83`,而 `123` 打印出 `123`?

DDD
发布: 2024-12-27 13:13:16
原创
373 人浏览过

Why Does `0123` Print `83` in Java, But `123` Prints `123`?

带有前导零的整数文字的令人困惑的行为

在 Java 中,带有前导零的整数文字表现出意想不到的行为,如以下代码所示片段:

System.out.println(0123); // Prints 83
System.out.println(123);  // Prints 123
登录后复制

原因差异

理解这种差异的关键在于八进制表示。整数文字中的前导零表示该文字以 8 进制(八进制)表示。在八进制中,每个数字代表 8 的幂,从 0 开始。

因此,文字 0123 可以转换为十进制,如下所示:

(0 * 8³) + (1 * 8²) + (2 * 8) + (3) = 83
登录后复制

相反,文字 123 是以十进制解释,其中每个数字代表 10 的幂。因此,其计算结果为123.

十六进制文字

除了八进制之外,Java 还支持使用 0x 前缀的十六进制(以 16 为基数)文字。例如,0xFF 代表十六进制数 255,相当于二进制的 11111111。

推荐

为避免混淆,建议省略整数前导零除非明确指定八进制表示形式,否则均为文字。否则,文字将被误解为八进制,导致意想不到的结果。

以上是为什么 Java 中 `0123` 打印出 `83`,而 `123` 打印出 `123`?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板