带有前导零的整数文字的令人困惑的行为
在 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中文网其他相关文章!