long类型还能这样写

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 来说,下划线分隔符并不会对数值的存储和计算产生任何影响。

下划线分隔符的处理是在编译器阶段完成的。当编译器遇到使用下划线的数字时,会将其解析为一个连续的整数,去除其中的下划线,并生成对应的字节码指令。生成的字节码中不会包含下划线分隔符的信息。

写了这么久的代码现在才发现这个情况,着实有点尴尬。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值