char类型混合运算中类型提升后赋值问题
- 混合运算的时候计算结果会提升为最大操作数的对应的类型,其中如果
char
,byte
,short
进行混合运算的时候例外,会将结果提升为int
类型。
- char的本质是一个数字,可以进行运算,但是注意:在混合运算的时候如果表达式中有变量参与计算,就会将结果当成一个变量来对待,而变量赋值和数值赋值是有区别的,变量赋值会首先检查变量类型,数值赋值会首先检查数值是否在可接受范围内,例如:
char num = 'a' + 10
,这里表达式结果是char
类型和int
类型混合计算,因此结果提升为int
类型,但是这个计算过程中没有变量参与计算,因此就会像char = 1
这种直接赋值一样,虽然右边是int
类型,但是会先检查这个数字的值是否超过了此char
类型上限(字符型占2字节),因此这里等价于char num = 107
,可以正确赋值。char ch = 'a'; ch = ch + 10;
,这里同样是a+10
,结算结果被提升为int
类型,但是此时a
用的是变量来表示的,因此计算结果会被优先当做是一个变量,赋值的时候会先检查变量的类型和需要赋值的类型是否匹配或者自动转化,因此这里会报错。
char num = 'a' + 10;
System.out.println(num);
======================================================================
char ch = 'a';
ch = ch + 1;
int i = 44;
char ch = i + 1;
char ch = 44 + 1;
- 额外,关于
char
类型本质是一个数字:
- 当用
char
定义一个字符变量的时候,例如char n = 'a';
,char n = 97;
都一样,不管给它赋数字也好赋字母也好,本质上都是赋给了它一个数字(这个数字用二进制存储在计算机中),在输出这个字符变量的时候输出这个数字(现将内存中存储的二进制值转化为十进制)对应的unicode码值。