首页 > Java开发 > INT 类型长度溢出缺陷

INT 类型长度溢出缺陷

读程序,猜答案吧!

 

[java] view plaincopyprint?
  1. public class IntOut {
  2.     /** 纳秒->毫秒转换 */
  3.     private static final int NANOTIME     = 1000000;
  4.     /** 轮询最长毫秒: 1000ms */
  5.     private static int       maxTimeOutMs = 1000;
  6.     /** 轮询最长纳秒: 1000*1000000ns */
  7.     private static int       maxTimeOutNs = maxTimeOutMs * NANOTIME;
  8.     public static void main(String[] args) {
  9.         for (int i = 8; i < 13; i++) {
  10.             if ((i * maxTimeOutNs) < ((i + 1) * maxTimeOutNs)) {
  11.                 System.out.println(i + "<" + (i + 1));
  12.             } else {
  13.                 System.out.println(i + ">=" + (i + 1));
  14.             }
  15.         }
  16.     }
  17. }

揭密答案啦!

 

 

 

[html] view plaincopyprint?

  1. 8<9
  2. 9<10
  3. 10>=11
  4. 11<12
  5. 12<13

为什么会出现10>=11的情况呢?

 

INT类型长度溢出了。INT类型的最大长度为-2147483648~2147483647。

11*maxTimeOutNs 变成负数了。 而11*maxTimeOutNs还是正数,所以会出现10>11的情况。

那么11>12又是什么情况呢?大家可以输出上面的每个值的结果看下哈。


本文固定链接: http://www.devba.com/index.php/archives/4269.html | 开发吧

报歉!评论已关闭.