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
相关产品推荐
相关产品推荐

