今天遇到一个有趣的问题
char b='a'+18;
char
b =
'a'
+
18
;
//因为char本身在码表中可以用数字表示的,然后运算玩之后还是char,应该输出s
//另外,如果下面定义就是错的了。
char
a =
'a'
;
char
b = a +
18
;
// 这样就是错的,因为JVM运算完后不知道结果是多少,所以会提示损失精度的错误,关于一个类型变量值的问题。
应该跟运算符优先级没有关系,
char b = 'a' + 18;的执行顺序应该是这样:
'a'+18先将'a'转成int类型的,即变成了97+18,
最后再隐式转换(char)(97+18),即获取结果为's'
强制类型转换只发生在int、long、float和double之间。比int类型低或就是int型的像byte型、short型、char型、int型之间的转换不不要强制类型转换,也不存在着运算优先级和类型转换的问题