java中char类型的计算?

新手上路,请多包涵
    int x = 1;
    char c1 = 'a' + x;
    char c2 = 'a'+ 1;

这个里边的c1和c2的区别是什么,为什么c1报错int转char损失精度,而c2不报错呢,来自初学者的疑问,感谢大佬们解惑

阅读 1.8k
2 个回答

jsl-5.2

5.2. Assignment Contexts
......
In addition, if the expression is a constant expression (§15.29) of type byte, short, char, or int:

  • A narrowing primitive conversion may be used if the variable is of type byte, short, or char, and the value of the constant expression is representable in the type of the variable.
  • .....

'a' + 1 正好满足此项,他是一个 int 类型(char + int 结果是 int)的 constant expression (常量),赋值给 char ,其值在 char 中可表示。于是可以使用丢失精度的转换。

'a' + x 不是 constant expression 。它就不能自动转换为 char 了。


因为 'a' + 1 是一个常量,编译器知道这一个常量转换成 char 不会损失。

但是 'a'+x 是一个变量,对编译器就是一个未知的 int 转换成 char ,于是会报损失精度。

具体可以看下这两篇:
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

image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏