You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中为何打印十六进制表示的数字会得到整数?

关于Java十六进制字面量的两个问题解答

先纠正示例代码的笔误:正确写法是sout(0xBD);(开头是数字0而非字母O),输出189属于正常结果,以下针对你的疑问逐一解释:

1. 为何十六进制表示会被转为整数而非布尔类型输出?

Java是强类型语言,每种字面量都有明确的默认类型:

  • 十六进制数字字面量(比如0xBD)默认属于int类型,只要数值在int的取值范围-2^31到2^31-1之间,0xBD=189显然符合这个范围。
  • 布尔类型的字面量仅有true和false两个,Java没有任何隐式规则会把数字自动转换为布尔值——你必须显式写出判断逻辑(比如0xBD != 0才能得到布尔值)。
    因此编译器会直接把0xBD当作int处理,输出自然是整数189。

2. 强制转double报错,但转char可行的原因?

先明确:正常情况下,把0xBD强制转换为double是不会报错的,比如执行以下代码:

System.out.println((double)0xBD); // 输出189.0

如果你的代码报错,大概率是语法问题(比如把0x写成了Ox,或者强制转换的写法不符合Java语法规范)。

而转换为char可行的原因是:
Java的char本质是无符号16位整数类型,取值范围是0到65535,0xBD=189完全在这个范围内,所以强制转换(char)0xBD是合法的,会将这个整数映射为对应的Unicode字符(比如0xBD对应的是½符号)。

内容的提问来源于stack exchange,提问作者allrightallrightallright

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 00:05:11