为什么Java中char变量加整数后直接赋值给char变量会报错?
编译报错的核心原因
这是Java基础类型运算的默认规则导致的:
- 所有比
int位数少的整数类型(char、byte、short)在参与算数运算时,会自动向上转型为int类型再做计算 - 你的代码里
c是char类型,和int字面量10相加后,整个c + 10表达式的结果已经是int类型 int是32位有符号整数,char是16位无符号整数,把int直接赋值给char属于窄化转换,有精度丢失风险,Java编译器默认会阻止这种操作,因此抛出编译错误。
两种解决方案
- 手动强制转换运算结果为
char类型,注意要把整个运算表达式括起来:
char a = (char) (c + 10);
- 如果你的变量
c后续不会修改,可以给它加final修饰变成常量,编译器会自动计算c + 10的结果(34+10=44),确认结果在char的取值范围(0~65535)内后会允许隐式转换:
final char c = 34; char a = c + 10; // 编译正常
补充说明:你如果直接写char a = 34 + 10;是不会报错的,因为两个字面量相加属于常量表达式,编译阶段就能确定结果在char取值范围内,不需要手动转型。
内容的提问来源于stack exchange,提问作者Alexey Rodionov
相关产品推荐
相关产品推荐

