登录
首页 >  文章 >  java教程

Java二进制八进制十六进制表示方法

时间:2026-03-24 17:27:48 315浏览 收藏

本文详解Java中二进制(0b/0B前缀,Java 7起支持)、八进制(0开头但已不推荐,易出错且被IDE警告)和十六进制(0x/0X前缀,最安全常用)字面量的正确写法、常见误区及实战注意事项,强调前缀决定解析规则、不可混用,并提醒开发者警惕八进制陷阱、善用下划线分隔和radix参数处理字符串进制转换——掌握这三条核心原则,就能避开90%的进制相关编译错误与逻辑bug。

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学习网公众号,给大家分享更多文章知识!

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