Java float变量赋值5/2时整数除法告警含义及规则咨询
Java 整型除法相关问题解答
为什么5/2默认按int类型运算
Java的整数字面量默认类型为int:所有未添加L/l后缀的整数字面量(例如5、2),编译器都会默认识别为int类型。
Java执行运算前会先对运算符两侧的操作数做类型提升,再执行计算:两个int类型的操作数做运算,结果默认仍为int类型。因此5/2的运算过程本质就是两个int值做整型除法,先得到截断小数后的int结果2,之后才会触发赋值阶段的类型转换,将int的2转为float类型的2.0赋值给变量。
不存在“仅赋值时才按int处理”的情况,无论是否将5/2的结果赋值给其他变量,该运算本身都是整型除法,例如直接执行System.out.println(5/2);,输出结果也是2而非2.5。
IDE提示信息的含义
提示'5/2': integer division in floating-point context的具体含义是**「'5/2':浮点数上下文中出现了整型除法」**。
该提示是IDE的风险告警:检测到你将整型除法的结果,用在了需要浮点数的场景中(此处就是要赋值给float类型的变量),大概率和你的代码预期不符——你原本可能是想要得到2.5的浮点运算结果,但当前写法会先截断小数部分得到整型的2,再转为浮点数,最终结果和预期存在偏差。
如果需要得到浮点除法的结果,只要将任意一个操作数改为浮点字面量即可,例如修改为5.0/2、5f/2,运算时就会按浮点规则计算,得到2.5的预期结果。
内容的提问来源于stack exchange,提问作者Rhythm
相关产品推荐
相关产品推荐

