EN中文

Java 中以0开头的int变量的真实值

在Java中,以0开头的int字面量会被解释为八进制数。本文详解Java八进制整数的表达方式。

  • Ryan
  • 阅读 1 分钟
/images/posts/java-octal-int.png

今天在leetcode上做题的时候无意中发现下面这个问题:

请问下面的Java语句输出的是什么值?

System.out.println(00123);
System.out.println(0_123);

答案是:

83
83

为什么??

当时也不解,后来在Java语言规范里面找到答案,请看Java 7 语言规范,规范里头明确规定:

An octal numeral consists of an ASCII digit 0 followed by one or more of the ASCII digits 0 through 7 interspersed with underscores, and can represent a positive, zero, or negative integer.

也就是说,以0开始的int类型,Java会将它转换成八进制表示,对于00123来说,代表的八进制值为:1×8×8+2×8+3 = 83。

Written by : Ryan

Writing about distributed systems, AI engineering, and production internals.

Recommended for You

hashCode()的实现细节

hashCode()的实现细节

本文将深入分析Java hashCode()方法的实现原理,从类加载到哈希冲突处理。

深入理解Java String.intern() 内存模型

深入理解Java String.intern() 内存模型

Java中string.intern()方法调用会先去字符串常量池中查找相应的字符串,如果字符串不存在,就会在字符串常量池中创建该字符串然后再返回