10. Java 详解整数字面量

10. Java 详解整数字面量

在 Java 中,整数字面量(Integer Literals) 是直接在代码中表示整数值的方式。Java 支持四种进制的整数:

  1. 十进制(Decimal)10
  2. 十六进制(Hexadecimal)0xA
  3. 二进制(Binary)0b1010
  4. 八进制(Octal,已过时)012(不推荐使用)

此外: ✅ 默认情况下,整数类型是 int,除非加 L 变为 long
Java 7+ 允许使用 _ 作为分隔符,提高可读性。


1️⃣ Java 整数字面量的 4 种进制表示

✅ 十进制(Decimal,默认)

  • 默认情况下,整数是十进制(Base 10)
int decimalValue = 26;
System.out.println(decimalValue);  // 输出 26

✅ 十六进制(Hexadecimal)

  • 0x0X 开头,数字范围是 0-9A-F(不区分大小写)
int hexValue = 0x1A;   // 1A = 26
int hexLowerCase = 0x1a;
System.out.println(hexValue);  // 输出 26

✅ 二进制(Binary,Java 7+ 支持)

  • 0b0B 开头,数字范围 01
int binaryValue = 0b11010;  // 11010(二进制)= 26(十进制)
System.out.println(binaryValue);  // 输出 26

✅ 八进制(Octal,不推荐)

  • 0(零)开头,数字范围 0-7
  • 容易混淆,不建议使用
int octalValue = 032;  // 032 = 3×8^1 + 2×8^0 = 26
System.out.println(octalValue);  // 输出 26

注意:避免误用八进制

int misleading = 09; // ❌ 错误!9 不是八进制数字

💡 现代 Java 编程很少使用八进制,建议使用 0x(十六进制)或 0b(二进制)代替。


2️⃣ intlong 类型的区别

默认情况下,整数是 int 类型。如果超出 int 的范围(-2³¹ ~ 2³¹-1),则必须使用 long 并加 L(建议大写 L 以避免混淆)。

long largeNumber = 9223372036854775807L;  // ✅ 使用 L 表示 long
int smallNumber = 100000;  // ✅ 默认是 int

错误示例

long error = 9223372036854775807;  // ❌ 编译错误,没有 `L`

3️⃣ 使用 _ 作为分隔符(Java 7+

Java 7 允许在数字字面量中使用 _ 分隔符,提高可读性:

int million = 1_000_000;
long creditCard = 1234_5678_9012_3456L;
System.out.println(million);  // 输出 1000000

下划线不能放在开头、结尾或 0x0b

int error = _1000;   // ❌ 错误,不能放在开头
int error2 = 1000_;  // ❌ 错误,不能放在结尾
int hexError = 0x_1A; // ❌ 错误,不能放在 `0x` 后

4️⃣ 进制转换

十进制 ↔ 其他进制转换

int decimal = 26;
String binaryStr = Integer.toBinaryString(decimal);  // 26 → "11010"
String hexStr = Integer.toHexString(decimal);        // 26 → "1a"
String octalStr = Integer.toOctalString(decimal);    // 26 → "32"

System.out.println(binaryStr);  // 输出 "11010"
System.out.println(hexStr);     // 输出 "1a"
System.out.println(octalStr);   // 输出 "32"

不同进制字符串转换为整数

int binary = Integer.parseInt("11010", 2);  // "11010" → 26
int hex = Integer.parseInt("1A", 16);       // "1A" → 26
int octal = Integer.parseInt("32", 8);      // "32" → 26

System.out.println(binary);  // 输出 26
System.out.println(hex);     // 输出 26
System.out.println(octal);   // 输出 26

5️⃣ IntegerLong 类的无符号支持(Java 8+)

Java 8+ 增加了 无符号整数支持,用于处理无符号数据:

int unsignedInt = Integer.parseUnsignedInt("4294967295");  // 2³²-1
long unsignedLong = Long.parseUnsignedLong("18446744073709551615"); // 2⁶⁴-1
  • Integer.compareUnsigned(int x, int y) → 无符号比较
  • Long.compareUnsigned(long x, long y) → 无符号比较
  • Integer.toUnsignedLong(int x)intlong
  • Long.divideUnsigned(long x, long y) → 无符号除法

6️⃣ 整数溢出(Integer Overflow)

如果 int 超过 2³¹-1,会发生溢出:

int max = Integer.MAX_VALUE;  // 2147483647
int overflow = max + 1;
System.out.println(overflow);  // ❌ 输出 -2147483648(溢出)

解决方案

  • 使用 long 存储大数
  • 使用 BigInteger 进行超大数计算
import java.math.BigInteger;

BigInteger big = new BigInteger("92233720368547758070");
BigInteger sum = big.add(new BigInteger("1"));
System.out.println(sum);  // ✅ 正确计算

🔹 结论

进制 前缀 示例 说明
十进制(默认) 100 一般整数
十六进制 0x0X 0x1A 0-9, A-F16 进制)
二进制(Java 7+) 0b0B 0b1010 01
八进制(不推荐) 0 0123 0-7

最佳实践

  • 默认用 int,超出范围用 long(加 L
  • 使用 _ 分隔符提高可读性(如 1_000_000
  • 不要使用八进制,容易混淆
  • 大数计算用 BigInteger

🚀 希望这个讲解能帮你彻底理解 Java 整数字面量! 🎯

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,635评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,543评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,083评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,640评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,640评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,262评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,833评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,736评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,280评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,369评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,503评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,185评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,870评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,340评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,460评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,909评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,512评论 2 359

推荐阅读更多精彩内容