Java基礎資料型別 (Elementary Data Type)自動轉型溢出問題

來源:互聯網
上載者:User

標籤:

<span style="font-size:14px;">public class TestCast {public static void main(String[] args) {int money=1000000000;//10億int year=20;int total=money*year;System.out.println(total);}}</span>

輸出結果:-1474836480

這個時候我們就可以想到int的範圍是-21億~21億,而money*year的結果明顯超出這個範圍,所以會溢出,然而將total的資料類型改成long會怎麼樣呢?

public class TestCast {public static void main(String[] args) {int money=1000000000;//10億int year=20;long total=money*year;System.out.println(total);}}
輸出結果:-1474836480

理論上講應該就會輸出正確結果,可實際情況還是溢出。這是為什麼呢?因為money和year都是int型,所以他倆的乘積也是int型,超出int型就會出現溢出,可以怎麼解決呢?把money或者year強制轉換成long型即可,如下:

<span style="font-size:14px;">int money=1000000000;//10億int year=20;long total=(long)money*year;System.out.println(total);</span>
輸出結果:20000000000
這樣就輸出了正確結果。但如果寫成long total=(long)(money*year);的話,結果依然不正確,因為money與year的乘積已經溢出再強制轉換成long類型,結果依然不正確。


再看下面一個小例子:

public class TestCast {public static void main(String[] args) {/*int money=1000000000;//10億int year=20;long total=money*year;System.out.println(total);*//*int money=1000000000;//10億int year=20;long total=(long)money*year;System.out.println(total);*///一個人70年心跳多少次long times=70*60*24*365*60;System.out.println(times);}}
輸出結果:-2087447296

很明顯溢出,應該如何處理呢?在這條語句long times=70*60*24*365*60;的任一數字後面加上L,強制轉換成long類型即可。如long times=70*60*24*365*60L;小技巧,在第一個數字後面加L,這樣的話防止前面的相乘結果已溢出如:long times=70L*60*24*365*60;


---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

總結

之前A題的時候經常遇到這種大數問題,有時候能搞正確有時候就需要調試幾次才能正確,現在已經徹底搞明白大數的強制轉換溢出的問題,希望能幫到不明白的朋友。


著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

Java基礎資料型別 (Elementary Data Type)自動轉型溢出問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.