java在进行算数运算时,byte,short,char类型会自动被提升为int
例如,以下代码是错误的
byte b1 = 10;
byte b2 = 20;
byte b3 = b1 + b2; // 编译错误
short s1 = 10;
short s2 = 20;
short s3 = s1 + s2; // 编译错误
char c1 = 10;
char c2 = 20;
char c3 = c1 + c2; // 编译错误
如果把b3,s3,c3换为int,就不会报错。
这是因为,java算数运算时默认以int进行运算,比int更小的数据类型在算术运算后会至少会得到int,故byte,short,char会编译报错。
此外,如果 byte,short,char进行自操作如++并不报错,自操作虽然等价于算术运算,但工作原理和算数运算不同。