Java陷阱(三)
前言:摘自《Java解惑》。这些问题都很经典,可以细细品味。
问题:无情的增量
代码:
/** *循环者2 * @authorLiangGzone */public class LoopDemo2 { publicstatic void main(String[] args) { doublei = Double.NaN; while(i!= i){ System.out.println("loop"); } }}分析:任何浮点操作,只要它的一个或多个操作数为NaN,那么其结果为NaN。一旦一个计算产生了NaN,它就被损坏了,没有任何更进一步的计算可以修复这样的损坏。NaN值意图使受损的计算继续执行下去,直到方便处理这种情况的地方为止。建议:float和double类型都有一个特殊的NaN值,用来表示不是数字的数量。对于涉及NaN值的计算,其规则很简单也很明智,但是这些规则的结果可能是违背直觉的。
Java陷阱(一)
Java陷阱(二)
Java陷阱(三)
Java陷阱(四)