Java中为何整数字面量可直接赋值给char,int变量却不行?
为什么字面量整数可直接赋值给char,int变量却不行?
你看到的“不进行显式类型转换,无法直接将整数赋值给char数据类型”这个表述其实有前提条件,并非所有整数赋值场景都适用,具体原因分两种情况分析:
测试1:整数字面量赋值
代码里的65是编译时常量,Java编译器会在编译阶段先校验这个值是否落在char的合法取值范围(0 ~ 65535)内。由于65完全符合范围,编译器会自动执行隐式窄化转换,把int类型的字面量转换为char类型,因此无需显式转换也能编译通过,运行后输出对应ASCII字符A。测试2:int变量赋值
而int i = 65;中的i是一个int类型变量,编译器无法在编译阶段确保它的值不会被后续代码修改(哪怕当前初始化值是65,后续也可能被改成超出char范围的数值)。为了避免潜在的数值溢出风险,Java语法强制要求必须显式写出类型转换char ch = (char)i;,否则直接编译报错。
简单来说:Java对编译期能确定值的常量会放宽隐式转换限制,只要值在目标类型范围内就允许;但对变量,因为值存在变动可能,必须通过显式转换明确告知编译器你已确认风险。
内容的提问来源于stack exchange,提问作者Anshul V. Kumar
相关产品推荐
相关产品推荐

