gir*_*iri 7 java floating-point integer infinity
我遇到了以下两个代码.为什么它不会为浮点引发异常,而在其他情况下它会抛出运行时异常.
class FloatingPoint
{
public static void main(String [] args)
{
float a=1000f;
float b=a/0;
System.out.println("b=" +b);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:b =无穷大.
如果我尝试使用int值,那么它将抛出运行时异常.为什么会这样?
pol*_*nts 12
简短的回答
积分类型(JLS 4.2.1)与浮点类型明显不同(JLS 4.2.3).在行为和操作方面可能存在相似之处,但也存在区别性差异,使得混淆两者可能导致许多陷阱.
除以零时的行为差异只是这些差异之一.因此,简短的回答是Java的行为方式是因为语言是这样说的.
整数类型的值是以下范围内的整数:
byte:从-128到127,包容性,即[-27, 27-1]short:从-32768到32767,包容性,即[-215, 215-1]int:从-2147483648到2147483647,包容性,即[-231, 231-1]long:从-9223372036854775808到9223372036854775807,包容性,即[-263, 263-1]char从'\u0000'以'\uffff'包容性的,也就是说,从0到65535,即[0, 216-1]浮点类型是float和double,它在概念上与单精度32位和双精度64位格式IEEE 754值和运算相关联.
从最小到最大,它们的值按如下顺序排列:
0.0 == -0.0),此外,还有一些特殊的Not-a-Number(NaN)值,这些值是无序的.这意味着如果其中一个(或两个!)操作数是NaN:
<,<=,>,和>=返回false==返回false!=返回true尤其x != x是true当且仅当x是NaN.
例如double,无穷大NaN可以称为:
情况类似于float和Float.
Exception在这些情况下,数值运算可能只会抛出:
NullPointerException,如果null需要对引用进行拆箱转换ArithmeticException,如果右侧对整数除法/余数运算为零OutOfMemoryError,如果需要装箱转换并且没有足够的内存它们是重要的,因为它们是陷阱的常见来源.一般来说:
null对于整数运算:
ArithmeticException如果右侧为零,则抛出除法和余数运算对于浮点运算:
NaN或0,则结果为NaN.NaN所有浮点运算的一般规则如下:
NaN.NaN作为操作数的所有数值运算都会产生NaN结果.这个已久的答案还没有涵盖很多问题,但鼓励读者浏览相关问题和参考资料.
| 归档时间: |
|
| 查看次数: |
489 次 |
| 最近记录: |