登录
首页 >  文章 >  java教程

Java不同进制表示方法及前缀写法

时间:2026-04-04 08:36:30 201浏览 收藏

本文深入解析了Java中不同进制字面量的正确写法与常见陷阱:自Java 7起,二进制必须使用`0b`/`0B`前缀(如`0b1010`),纯数字如`1010`永远被当作十进制;八进制虽以`0`开头(如`012`),但因易混淆、易出错且已被社区“事实废弃”,强烈建议避免;十六进制以`0x`/`0X`开头(如`0xFF`),安全、清晰、广泛应用。文章还强调编译器严格按前缀解析,绝不自动推断进制,并提醒开发者注意类型转换(如`0xFF`需强转为`byte`)和字符串解析时必须显式指定基数(如`Integer.parseInt("1010", 2)`),帮你彻底避开进制相关的低级错误和隐蔽坑点。

Java中二进制、八进制和十六进制怎么表示_不同进制的前缀写法

Java里怎么写二进制字面量:必须用 0b0B

Java 7 开始才支持二进制字面量,不加 0b 前缀的纯数字(比如 1010)永远被当成十进制。写成 0b1010 才表示二进制的 10(即十进制 10),0B1111 同样合法——大小写不敏感。

  • 错误写法:int x = 1010; → 十进制一千零一十,不是二进制十
  • 正确写法:int x = 0b1010; → 编译通过,值为 10
  • 不能有前导空格或下划线在 0b 和数字之间:0b 1010 报错;0b10_10(Java 7+ 支持下划线分隔)是合法的
  • 只适用于整数字面量,不能用于 floatdouble

八进制前缀是单个 0,但已不推荐使用

八进制用 0 开头(如 012 表示十进制 10),但它极易误读且容易出错:比如 0809 直接编译失败(八进制不含 8、9),而 0123 看起来像十进制,实则是八进制的 83。

  • int x = 012; → 合法,值为 10
  • int y = 08; → 编译错误:Invalid octal digit
  • 现代 Java(尤其是团队协作或新项目)应避免八进制字面量,JDK 文档明确标注其“deprecated in spirit”——虽未正式废弃,但 IDE 通常会警告
  • 如果真要表达权限值(如 Unix 的 0644),建议改用十六进制 0x1A4 或直接十进制 420,更清晰不易错

十六进制必须以 0x0X 开头,A-F 不区分大小写

这是最常用也最安全的非十进制写法。0x 前缀明确无歧义,且字母部分大小写均可,0xFF0xff0xFf 全部等价。

  • int color = 0xFF0000; → 红色,值为 16711680
  • byte mask = (byte) 0xFF; → 注意强制转型,否则 0xFF 默认是 int 类型(值为 255),超出 byte 范围需显式转换
  • 不能写成 0x 后跟非法字符,如 0xG1 编译报错:Invalid hexadecimal digit
  • 常用于位掩码、颜色值、内存地址模拟等场景,可读性远高于等长二进制

为什么不能混用前缀?比如 0b0x10010 当作二进制

Java 编译器按前缀严格分类字面量类型,前缀决定整个数的解析规则。没有“自动推断”机制,也不会回退尝试其他进制。

  • 010 永远是八进制 → 值为 8,不是二进制的 10(即 2)
  • 0b0x10 是语法错误:编译器看到 0b 就期待后续全是 01x 直接导致 Illegal digit
  • 十六进制和二进制之间没有“组合前缀”,想表达 0x10 对应的二进制,只能写 0b10000,或运行时用 Integer.toBinaryString(0x10)
  • 一个常见坑:从配置文件或用户输入读到字符串 "1010",它既不是 0b1010 也不是 1010 字面量,必须用 Integer.parseInt("1010", 2) 显式指定进制
实际写代码时,二进制用 0b,十六进制用 0x,八进制尽量绕开——这三个点卡住,基本就不会栽在进制字面量上了。真正容易漏的是类型隐式转换和字符串解析时的进制参数,那得靠 parseInttoString 配合 radix 参数来兜底。

今天关于《Java不同进制表示方法及前缀写法》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>