遇到了一個(gè)簡(jiǎn)單的細(xì)節(jié), 做個(gè)記錄,直接貼代碼
System.out.println(1.0 / 0);
//下面報(bào)錯(cuò)
System.out.println(1 / 0);
- int型數(shù)據(jù),除0會(huì)發(fā)生報(bào)錯(cuò),信息如下:
Infinity
Exception in thread "main" java.lang.ArithmeticException: / by zero
at leetcode_normal.Test1.main(Test1.java:111)
- 然而,
System.out.println(1.0 / 0);
為什么返回值會(huì)是Infinity
- 各種查找得,
Infinity
表示無窮大,java中,只有浮點(diǎn)類型數(shù)據(jù)存在這種表達(dá)形式, 其他類型都有明確的數(shù)據(jù)范圍 - 當(dāng)double類型數(shù)據(jù)除int類型數(shù)據(jù)時(shí),隱式類型轉(zhuǎn)換,int類型->double類型,即
System.out.println(1.0 / 0);
轉(zhuǎn)為為System.out.println(1.0 / 0.0);
. - 而浮點(diǎn)運(yùn)算0.0作為除數(shù)時(shí),會(huì)轉(zhuǎn)為一個(gè)無限接近于0的小數(shù),而不是徹底的zero,
再貼一下完整的代碼
System.out.println(1.0 / 0);
System.out.println(1.0 / 0.0);
System.out.println((long)(1.0 / 0.0));
System.out.println(1 / 0);
Infinity
Infinity
Exception in thread "main" java.lang.ArithmeticException: / by zero
at leetcode_normal.Test1.main(Test1.java:112)
9223372036854775807
- 可以看到, double/0與double/0.0結(jié)果都為無窮大,
- 用long返回可以得到一個(gè)非常非常大的數(shù)字
- 另外,double源碼中有關(guān)無窮大與無窮小的定義為
public static final double POSITIVE_INFINITY = 1.0 / 0.0;
public static final double NEGATIVE_INFINITY = -1.0 / 0.0;