为什么JAVA中long后面要加L?float要加F ?

问题背景

今天在写代码时,将之前的一个变量进行了修改,运行单测的时候发现单测跑不过了,有点疑惑:

原代码简化下:

count = 123;
Long MAX_SIZE = 3 * 1024 * 1024 * 1024L;
if (count > MAX_SIZE) {
   do error 逻辑
}

修改后的代码:

count = 123;
long MAX_SIZE = 3 * 1024 * 1024 * 1024;
if (count > MAX_SIZE) {
  do error 逻辑
}

做此次修改主要是避免每次都拆装箱,结果修改后,if 条件变为了true,执行到了 异常流的处理逻辑。

原因

java中的整型默认为int, 3 * 1024 * 1024 * 1024 超过了 int 的最大值(2 的 31 次方 - 1 = 2147483648 - 1 = 2147483647),导致溢出变为了 -1073741824,所以出现了上面的问题。

知识点

java中的整型默认为int,int转为long是安全的,所以会自动转,能编译通过。
浮点数不加F默认是double类型,double转float可能损失精度,因为不会自动转,编译通不过。

转换的目的类型占得空间范围一定要大于转化的源类型
正向过程:由低字节向高字节自动转换
byte->short->int->long->float->double
逆向过程不会自动转,编译通不过,使用强制转换,可能丢失精度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值