Java 7 引入多項語法糖,旨在減少樣板代碼、提升可讀性。本文聚焦數值字面量兩項增強:二進制字面量 與 下劃線分隔符,它們雖微小,卻極大改善了位運算與大數值的編碼體驗。
0b / 0B 前綴需表示位模式時,只能用 Integer.parseInt("1100110", 2),弊端眾多:冗長、運行時解析開銷、無法用於 switch case(非常量表達式)、拼寫錯誤運行時才發現。
int x = 0b1100110; // 十進制 102
int flags = 0B1010_0001; // 可配合下劃線
優勢:編譯期常量、零開銷、可用於 switch、IDE 語法高亮、直觀對應位模式。適用場景:網絡協議解析、加密算法、位掩碼操作、文件權限標志位等。
電話號碼 404-555-0122、銀行卡 6225 8888 9999 0000、金額 100,000,000 都用分隔符。Java 借鑒 Ruby 引入 _ 作為純編譯期視覺分隔,不影響語義:
long maxLong = 9_223_372_036_854_775_807L; // 一眼看清量級
int bitMask = 0b0001_1100_0011_0111_0010_1011_1010_0011; // 每4位一組,對應十六進制
double amount = 1_000_000.99;
_123、123_ ❌1_23.45、123_.45 ❌123_L ❌0_xFF、0b_1010 ❌1__2__3 ✅(但不推薦)L 強制規範long l = 1010100l; 极易誤讀為 10101001。強制使用大寫 L:long l = 1010100L;,消除歧義。
二進制字面量解決了「位模式直觀表達」的缺失;下劃線分隔符解決了「大數值可讀性」的痛點。兩者均為編譯期語法糖,零運行時開銷,建議在涉及位運算、配置常量、ID 生成等場景大膽使用,讓代碼自文檔化。