最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java數(shù)據(jù)溢出代碼詳解

 更新時間:2017年09月30日 12:04:56   作者:Pony小馬  
這篇文章主要介紹了Java數(shù)據(jù)溢出的相關(guān)內(nèi)容,包括具體代碼示例,分析比較詳細,希望對大家有所幫助,感興趣的朋友可以參考下。

java是一門相對安全的語言,那么數(shù)據(jù)溢出時它是如何處理的呢? 看一段代碼,

public class Overflow  
{ 
  /** 
   * @param args 
   */ 
  public static void main(String[] args)  
  { 
    int big = 0x7fffffff; //max int value 
    System.out.println("big = " + big); 
    int bigger = big * 4; 
    System.out.println("bigger = " + bigger); 
  } 
} 

運行的結(jié)果是:

big = 2147483647 
bigger = -4 

int類型在java中是四字節(jié),且分正負,所以最大的int型數(shù)值是0x7fffffff。變量bigger顯然是溢出了,但是你并沒有得到編譯錯誤,或者運行時錯誤??雌饋聿诲e,但是有時候并不一定是好事情,就像這個示例,我們期望的結(jié)果應該不是-4,而且程序也沒有錯誤提示。
那么如何解決溢出的問題呢? 很容易想到的一個方案是用更大的數(shù)據(jù)類型,long型占8個字節(jié),可以用,

public class Overflow  
{ 
  /** 
   * @param args 
   */ 
  public static void main(String[] args)  
  { 
    long reallyBig = 0x7fffffffL; 
    System.out.println("reallyBig = " + reallyBig); 
    long reallyBigger = reallyBig * 4; 
    System.out.println("reallyBigger = " + reallyBigger); 
  } 
} 

輸出,

reallyBig = 2147483647 
reallyBigger = 8589934588 

繼續(xù)思考一個問題,第一個示例溢出的結(jié)果為什么是-4? 可以從第二個示例的結(jié)果得到一些啟示,8589934588的十六進制是1FFFFFFFC,只留四個字節(jié)(int型只占四字節(jié))是FFFFFFFC,這是補碼,并且因為是最高位是1,所以還是個負數(shù)。轉(zhuǎn)成原碼(除符號位外,取反加1)變?yōu)?0000004,也就是-4。

下面一個實例,是從另一篇文章中看到的,也給大家分享下。

long now = System.currentTimeMillis(); 
      long m1 = now-1000*60*60*24*30*3;  
      long test = (long)1000*60*60*24*30*3; 
      long nocast = 1000L*60*60*24*30*3; 
      long m2 = now-1000L*60*60*24*30*3; 
      System.out.println("我是test:"+test); 
      System.out.println(nocast); 
      System.out.println("now:"+now); 
      System.out.println("m1:"+m1);  
      System.out.println("m2:"+m2);

輸出結(jié)果:

我是test:7776000000 
7776000000 
now:1359510417546 
m1:1360324352138 
m2:1351734417546 

有點奇怪了吧 1000*60*60*24*30*3的計算值與1000L*60*60*24*30*3 的計算值是不一樣的 1000*60*60*24*30*3 的計算結(jié)果是-813934592

而 (long)1000*60*60*24*30*3;  1000L*60*60*24*30*3;的計算結(jié)果都是7776000000 這個結(jié)果才是需要的東西

為什么會出現(xiàn)這種情況呢 Java在做乘法時,如果沒有顯示確定的數(shù)據(jù)類型,那么他會默認按照int數(shù)據(jù)類型進行計算就好比1000*60*60*24*30*3,這個數(shù)值在計算時導致int數(shù)據(jù)溢出,所以出現(xiàn)了負數(shù)的情況。

(long)1000*60*60*24*30*3;  1000L*60*60*24*30*3;這兩者,前者是將首個計算數(shù)強制造型為long 然后按照long類型運算得出了正確的計算結(jié)果,后者在計算時將數(shù)據(jù)類型修改為long 能直接獲得正確的計算結(jié)果,異曲同工。

這一點還是很隱晦的,要注意,防止以后出錯。這錯誤估計不好排查。

還有一點就是 L所在的位置,有點奇怪 1000L*60*60*24*30*3; 1000*60L*60*24*30*3;1000*60*60L*24*30*3;1000*60*60*24*30L*3;這幾種寫法都可以正確轉(zhuǎn)為long型,但是1000*60*60*24*30*3L;就不對,而且3*60*60*24*30*1000這一種寫法的時候 L跟在任何一個數(shù)字后面都沒問題。有點莫名其妙,用的時候debug測試要優(yōu)先確定這個串的計算結(jié)果。

總結(jié)

以上就是本文關(guān)于Java數(shù)據(jù)溢出代碼詳解的全部內(nèi)容,希望對大家有所幫助。歡迎各位瀏覽本站的其他專題,有問題請留言,小編會及時回復大家的。

相關(guān)文章

  • IDEA項目使用SpringBoot+MyBatis-Plus的方法

    IDEA項目使用SpringBoot+MyBatis-Plus的方法

    這篇文章主要介紹了IDEA項目使用SpringBoot+MyBatis-Plus的方法,本文分步驟通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • jmeter添加自定函數(shù)的實例(jmeter5.3+IntelliJ IDEA)

    jmeter添加自定函數(shù)的實例(jmeter5.3+IntelliJ IDEA)

    這篇文章主要介紹了jmeter添加自定函數(shù)的實例(jmeter5.3+IntelliJ IDEA),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Java實現(xiàn)手寫乞丐版線程池的示例代碼

    Java實現(xiàn)手寫乞丐版線程池的示例代碼

    在這篇文章當中我們主要介紹實現(xiàn)一個非常簡易版的線程池,深入的去理解其中的原理,麻雀雖小,五臟俱全,感興趣的小伙伴快跟隨小編一起學習學習吧
    2022-10-10
  • Java遞歸基礎與遞歸的宏觀語意實例分析

    Java遞歸基礎與遞歸的宏觀語意實例分析

    這篇文章主要介紹了Java遞歸基礎與遞歸的宏觀語意,結(jié)合實例形式分析了java遞歸的相關(guān)原理、操作技巧與注意事項,需要的朋友可以參考下
    2020-03-03
  • java 兩階段終止線程的正確做法

    java 兩階段終止線程的正確做法

    這篇文章主要給大家分享了java 兩階段終止線程的正確做法,文章列舉出錯誤的做法與正確做法做對比,具有一定的參考價值,需要的小伙伴可以參考一下,希望對你有所幫助
    2021-12-12
  • 詳解簡單基于spring的redis配置(單機和集群模式)

    詳解簡單基于spring的redis配置(單機和集群模式)

    這篇文章主要介紹了詳解簡單基于spring的redis配置(單機和集群模式),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • Java將微信和支付寶支付的個二維碼合二為一的方法

    Java將微信和支付寶支付的個二維碼合二為一的方法

    這篇文章主要介紹了Java將微信和支付寶支付的個二維碼合二為一的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • spring無法引入注解及import org.springframework.web.bind.annotation.*報錯的解決

    spring無法引入注解及import org.springframework.web.bind.annota

    本文主要介紹了spring無法引入注解及import org.springframework.web.bind.annotation.*報錯的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • 淺談java中的TreeMap 排序與TreeSet 排序

    淺談java中的TreeMap 排序與TreeSet 排序

    下面小編就為大家?guī)硪黄獪\談java中的TreeMap 排序與TreeSet 排序。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • IDEA遇到Internal error. Please refer to http://jb. gg/ide/critical-startup-errors的問題及解決辦法

    IDEA遇到Internal error. Please refer to http://jb. gg/ide/crit

    這篇文章主要介紹了IDEA遇到Internal error. Please refer to http://jb. gg/ide/critical-startup-errors的問題及解決辦法,本文通過圖文并茂的形式給大家介紹的非常詳細,需要的朋友可以參考下
    2020-08-08

最新評論

慈溪市| 山东省| 凤阳县| 宁德市| 陆川县| 清徐县| 中山市| 田东县| 安陆市| 荥经县| 尉氏县| 虎林市| 双江| 武乡县| 武乡县| 洪江市| 汾西县| 延长县| 松潘县| 彰武县| 甘德县| 上杭县| 如东县| 体育| 阿荣旗| 沁阳市| 荔波县| 台北市| 车险| 安顺市| 乌恰县| 平陆县| 绥中县| 南木林县| 黎川县| 项城市| 万州区| 陆良县| 鄂伦春自治旗| 岳阳市| 元江|