程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 前言 & java中精度損失問題 & +=語句強制轉換性,前言怎麼寫

前言 & java中精度損失問題 & +=語句強制轉換性,前言怎麼寫

編輯:JAVA綜合教程

前言 & java中精度損失問題 & +=語句強制轉換性,前言怎麼寫


1、初入園,初寫博

  大約一個月前,我獲得了在海南電信規劃設計院實習的機會,作為通信學子,能進設計院實習實屬一個很好的機會,可是在我進入設計院實習兩周左右的時間之後,我發現了設計院的工作基本上就是簡單枯燥的機械工作。實習期間無非就是拿著前輩的規劃設計圖做出相應的設計規劃書,設計規劃書有個現成的模板,我們實習的工作就是根據設計圖把模板進行相應的修改,修改完成之後則算完成了一份設計規劃書。工作性質簡單乏味不只是實習如此,我還對我在通信行業的規劃有了相應的展望,實習結束之後,即使我成為了一個優秀的電信規劃設計師,這樣也不過只是依照電信規劃原則而進行設備擺放的一個規劃設計師。在我看來整個通信行業基本沒有什麼創新可言(參與通信領域新技術的研發除外),沒有創新亦沒有挑戰,簡單無聊的機械工作實在是不適合年輕人,所以我選擇了辭職,放棄了穩定的國企工作,放棄了這樣一個混吃等死的工作。

  在辭職之後,我想開始自己的程序員生涯,畢竟我個人對於編程還是很有好感的,在我看來這是一個充滿挑戰的職業。上周,我接到一個中通服旗下的軟件公司的電話面試,面試之後我知道自己作為非軟件工程專業的學子在軟件開發方面還是存在很多不足,於是我重新開始了軟件開發的基礎學習,另外,我也在昨天申請了博客,在此記錄下我當下的學習感悟以及日後參加工作遇到的問題及處理辦法。

 

2、java中數據類型精度損失問題

  在網上找了畢向東老師的java教學視頻開始了自學之路,在前兩天的自學過程中有兩點內容我認為應該著重注意下,寫在此處,給未來的我和路過的朋友一點小小的幫助。

  關於java中數據類型范圍值溢出報錯:

 1 class  Demo2
 2 {
 3     public static void main(String[] args) 
 4     {
 5         byte a,b,c;
 6         /*將int型賦值給byte型,byte型長度為一個字節,數值范圍-128~127*/
 7         a=5;
 8         b=128;//將超出數據類型數值范圍的數賦給該類型會報錯
 9         c=a+b;//將未知大小的數值賦給byte型會報錯
10         System.out.println(c);
11 
12         int x,y,z;
13         /*int型是java默認的整數類型,其長度為四個字節,數值范圍-2147483648~2147483647*/
14         x=154;
15         y=Integer.MAX_VALUE+1;//給y賦值int最大值加1超出范圍,溢出但是不報錯
16         z=x+y;//將未知大小的數值賦給int型不會報錯
17         System.out.println(z);
18     }
19 }

  運行結果:

  int型不報錯,運行結果為-2147483494(錯誤結果)

  程序代碼分析:

  byte型:1)在給其賦值超出范圍的數值會報錯精度損失(數據溢出)

      2)用未知大小的數(即變量)給其賦值時會報錯精度損失(數據溢出)

  int型: 1)在給其賦值超出范圍的數值不會報錯精度損失(數據溢出)

       2)用未知大小的數(即變量)給其賦值時不會報錯精度損失(數據溢出)

  總結:

  在編程中,不同類型的數據在賦值的時候可以使用強制轉換來實現賦值,但是其中可能會出現精度損失,此類問題引起的bug不易發現,編程時需注意,尤其是int型數據,作為java默認數據類型,編譯器在編譯過程中不會對此進行報錯,出現的精度損失bug很難發現,尤為要引起注意。

 

3、java中 += 和 = ( + ) 的區別

  在java中有+=這一運算符,初學者可能認為+=與 = ( + ) 是等價的,其實不是這樣的。

 1 class  Demo2
 2 {
 3     public static void main(String[] args) 
 4     {
 5         byte a;
 6         a=5;
 7         a+=2;//順利通過編譯,沒有報錯
 8         System.out.println(a);
 9 
10         byte b;
11         b=5;
12         b=b+2;//不能通過編譯,報錯提示精度損失
13         System.out.println(b);
14         
15     }
16 }

  運行結果:

  程序代碼分析:

  +=語句將右側結果進行了強制類型轉換,之後在賦給左邊。

  = ( + )語句並沒有強制類型轉換,所以編譯時報錯精度損失。

  總結:

  +=語句等價於=(強制類型轉換)( + )語句。

  因為存在強制類型轉換,所以要注意精度損失問題。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved