long类型还能这样写
今天在阅读代码的时候,发现前辈long类型的定义使用了这种写法
long num = 60_000;
由于之前没见过这种写法,一时认为这不应该是字符串吗,怎么能这么写呢?
原来在 JDK 1.7 之前,Java 中的整数类型(byte、short、int、long)只支持十进制表示法,无法使用下划线分隔数字,使其更易读。从 JDK 1.7 开始,引入了下划线分隔符(_)的特性,允许在整数类型中使用下划线进行分隔。
这个特性的目的是为了提高代码的可读性,特别是对于较大的数字。通过在数字中添加下划线,可以更清晰地表示数字的结构和值,方便阅读和理解代码。下划线只是用作分隔符,不会对数值本身产生任何影响。
double a = 11.1_0_11;
float b = 22.1_1f;
int c = 1_1_1;
long d = 60_000;
那Java是怎么支持这种写法的呢?
编译器在将源代码编译成字节码时,会去除数字中的下划线,将其视为一个连续的整数。因此,对于 JVM 来说,下划线分隔符并不会对数值的存储和计算产生任何影响。
下划线分隔符的处理是在编译器阶段完成的。当编译器遇到使用下划线的数字时,会将其解析为一个连续的整数,去除其中的下划线,并生成对应的字节码指令。生成的字节码中不会包含下划线分隔符的信息。