int x = 1;
char c1 = 'a' + x;
char c2 = 'a'+ 1;
这个里边的c1和c2的区别是什么,为什么c1报错int转char损失精度,而c2不报错呢,来自初学者的疑问,感谢大佬们解惑
int x = 1;
char c1 = 'a' + x;
char c2 = 'a'+ 1;
这个里边的c1和c2的区别是什么,为什么c1报错int转char损失精度,而c2不报错呢,来自初学者的疑问,感谢大佬们解惑
具体可以看下这两篇:
Java 的运算符以及类型转换
Java 的数据类型
因为char c1 = 'a' + x;
这里的x变量显示定义了为int类型, 而'a'是字符型, 类型不同不能相加, 而char c2 = 'a' + 1;
是因为计算机储存的字符型是用ASCII码, 因此相当于字符a的ASCII码加1
报错int转char损失精度 是因为int类型比char类型的存储时字节多, 做转换只能从小转大:
double>float>long>int>short>byte, char 不是数字就不在里面但思想是一样的
其中int是4, chart是2
3 回答2.6k 阅读✓ 已解决
3 回答4.1k 阅读✓ 已解决
8 回答3.7k 阅读
4 回答2.8k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
4 回答1.9k 阅读
jsl-5.2
'a' + 1
正好满足此项,他是一个 int 类型(char + int 结果是 int)的 constant expression (常量),赋值给 char ,其值在 char 中可表示。于是可以使用丢失精度的转换。但
'a' + x
不是 constant expression 。它就不能自动转换为 char 了。因为
'a' + 1
是一个常量,编译器知道这一个常量转换成 char 不会损失。但是
'a'+x
是一个变量,对编译器就是一个未知的 int 转换成 char ,于是会报损失精度。