Android Studio 2.3.3中为何该除法表达式触发“数值溢出”警告?
为什么
float f2 = (float) (-Math.PI / 7.0);会触发“Numeric overflow in expression”警告? 先看你贴的代码片段:
float f1 = (float) (-Math.PI / 3.0); // OK float f2 = (float) (-Math.PI / 7.0); // Warning
这个警告完全是Android Studio内置Lint检查工具的误报,原因很清楚:
- 首先,
Math.PI是double类型的常量,-Math.PI / 7.0计算出来的结果是一个约等于-0.4487989505的double值,这个数值远在float类型的取值范围之内(float能容纳±3.4028235E38的数值),根本不可能出现数值溢出。 - 问题出在Lint的静态检查逻辑上:它在分析这个表达式的静态值时,错误地把浮点数转换时的精度损失判定成了数值溢出。而
-Math.PI / 3.0的结果(约-1.047197551)刚好没触发这个有问题的检查逻辑,所以没弹出警告。
总结一下:你的代码本身没有任何问题,这只是代码检查工具的一个小bug。你可以直接忽略这个警告,也可以给代码加上@SuppressLint("NumericOverflow")注解来屏蔽它。
内容的提问来源于stack exchange,提问作者Gerrit Beuze
相关产品推荐
相关产品推荐

