為什麼Java7開始在數字中使用下劃線
JDK1.7的釋出已經介紹了一些有用的特徵,儘管大部分都是一些語法糖,但仍然極大地提高了程式碼的可讀性和質量。其中的一個特徵是介紹字面常量數字的下劃線。從Java7開始,你就可以在你的Java程式碼裡把長整型數字比如10000000000寫成一個更具可讀性10_000_000_000。在字面常量數字中加下劃線的一個重要的原因是避免一些難以通過看程式碼來發現的細微的錯誤。對比10000000000 和1000000000,我們很難發現少了一個0或多了一個0,但對於10_000_000_000和1_000_000_000卻不然。所以如果你在Java原始碼中要處理大數字,你可以在數字中加入下劃線來提高可讀性。使用的時候要注意:在字面常量數字裡加下劃線是有一定規則的,下劃線只能在數字之間,在數字的開始或結束一定不能使用下劃線。在本章節的以下部分,我們將學習如何在字面常量數字中使用下劃線,以及在字面常量數字中使用它們的規則。
怎樣在Java中有效的給數字使用下劃線
正如我之前說的,這不過是個語法糖,非常像字串在 switch 場景下的實現,這也是使用編譯器的幫助下實現的。編譯期間,編譯器把這些下劃線移除,並把真實的數字賦值給變數。比如在編譯期間10_000_000將會被轉化成10000000。既然CPU在處理長數字上毫無壓力,對於我們這些可憐的在處理長數字上有困難的人類來說,就不用為它煩惱了。這個特徵尤其在需要處理大數額金錢、信用卡號碼、銀行賬號以及其它需要長賬號的銀行和金融領域更有用。儘管在寫Java檔案裡寫敏感資訊很讓人沮喪,我們應該永遠不要在編碼的時候這麼做。但在數字中用下劃線讓我們的生活比以前變得更加簡單了。
在Java中給數字加下劃線的規則
Java編碼語言對給數值型的字面值加下劃線有嚴格的規定。如上所述,你只能在數字之間用下劃線。你不能用把一個數字用下劃線開頭,或者已下劃線結尾。這裡有一些其它的不能在數值型字面值上用下劃線的地方:
- 在數字的開始或結尾
- 對浮點型數字的小數點附件
- F或L下標的前面
- 該數值型字面值是字串型別的時候
這裡有一些例子,來表現哪些地方加給數字加下劃線有效,哪些地方給數字加下劃線無效
float pi1 = 3_.1415F; // 無效的; 不能在小數點之前有下劃線
float pi2 = 3._1415F; // 無效的; 不能在小數點之後有下劃線
long socialSecurityNumber1 = 999_99_9999_L; //無效的,不能在L下標之前加下劃線
int a1 = _52; // 這是一個下劃線開頭的識別符號,不是個數字
int a2 = 5_2; // 有效
int a3 = 52_; // 無效的,不能以下劃線結尾
int a4 = 5_______2; // 有效的
int a5 = 0_x52; // 無效,不能在0x之間有下劃線
int a6 = 0x_52; // 無效的,不能在數字開頭有下劃線
int a7 = 0x5_2; // 有效的 (16進位制數字)
int a8 = 0x52_; // 無效的,不能以下劃線結尾
int a9 = 0_52; // 有效的(8進位制數)
int a10 = 05_2; // 有效的(8進位制數)
int a11 = 052_; // 無效的,不能以下劃線結尾
下面是一些在數字中用下劃線的其它示例:
long creditCardNumber = 6684_5678_9012_3456L; // 在編碼的時候,最好永遠不要這麼做
long socialSecurityNumber = 333_99_9999L; // 在編碼的時候,最好永遠不要這麼做
float pi = 3.14_15F;
long hexBytes = 0xFF_EC_DE_5E;
long hexWords = 0xCAFE_BABE;
long maxLong = 0x7fff_ffff_ffff_ffffL;
byte nybbles = 0b0010_0101;
long bytes = 0b11010010_01101001_10010100_10010010;
使用下劃線後,你會發現你的程式碼比以前可讀性更強。順便說一句,在java中應該一直用L去表示一個長整型數字。儘管用小寫的l表示長整型數也是合法的,但他看起來太像1了,所以應該永遠都不要用它。告訴我你能不能再 12l和121之間找出差別,我猜能找到的人不多吧。但是在 12L與121之間呢?
總之,要養成在數字中使用下劃線的習慣,尤其是對長整型數來說,這樣能增加它的可讀性。我知道這個功能只是從Java1.7開始才有效,還沒有被廣泛的使用。但鑑於Java1.8的現狀,我期望Java8在Java社群中傳播比Java7更加迅速更加廣泛。
相關文章
- 【短文】為什麼我不在PHP的私有變數用下劃線了?PHP變數
- 為什麼程式要從0開始計數
- 為什麼陣列下標是從0開始?陣列
- python變數命名為什麼數字不能開頭?Python變數
- PDF文字下劃線使用什麼軟體可以快速新增?
- Python 數值中的下劃線是怎麼回事?Python
- [譯] 為什麼你應該開始使用 KotlinKotlin
- 在Linux中,任務計劃格式中,前面5個數字分表表示什麼含義?Linux
- 為什麼微前端開始在流行——Web 應用的聚合前端Web
- python雙下劃線有什麼用Python
- 【敏捷0】敏捷專案管理-為什麼從敏捷開始?為什麼從PMI-ACP開始?敏捷專案管理
- 什麼是數字簽名?什麼是數字信封?他們如何使用
- 找到了一個原因 PHP 為什麼用下劃線命名欄位PHP
- 規定密碼以字母開頭只能包含字母、數字和下劃線密碼
- python中雙下劃線開頭得函式和變數Python函式變數
- 什麼是數字孿生,為什麼數字孿生對物聯網很重要?
- 為什麼畫素遊戲開始變多?遊戲
- 在頁面中的應該使用奇數還是偶數的字型?為什麼呢?
- python3判斷給定的字串是否只包含字母、數字、中劃線或者下劃線中的一個或多個,並且以字母或數字開頭(正規表示式)Python字串
- Python 中的單下劃線和雙下劃線Python
- 管理者為什麼會在計劃工作中失敗? (轉)
- 為什麼使用API?什麼情況下避免使用API?API
- Python之父:為什麼Python陣列下標從0開始Python陣列
- 工具在數字化轉型中扮演了什麼樣的角色?
- python中那些雙下劃線開頭得函式和變數Python函式變數
- Java8支援帶下劃線的數字常量Java
- 為什麼$.getJSON()在IE下失效JSON
- app直播原始碼,css給數字或文字在滑鼠懸停時新增下劃線動畫APP原始碼CSS動畫
- 為什麼我還在使用JavaEE?Java
- html中a標籤的下劃線怎麼去掉HTML
- 青否科技為什麼要開發數字人直播原始碼!原始碼
- .Net5 下Dictionary 為什麼可以在foreach中RemoveREM
- 為什麼混合工作和數字業務需要數字體驗監控
- 為什麼程式設計師應該從現在就開始看書程式設計師
- 【日記】已經在開始幻想明年的年度計劃了(498 字)
- 為什麼遊戲裡的數字,真的“值錢”?遊戲
- 為什麼越來越多的企業開始使用軟體快速開發框架?框架
- Python 的類的下劃線命名有什麼不同?Python