你首先要明白,在基本类型数据当中,强制类型转换只发生在int、long、float和double之间。比int类型低或就是int型的像byte型、short型、char型、int型之间的转换不不要强制类型转换,也不存在着运算优先级和类型转换的问题,这是java官方规定的,你无权修改。至于运算后的结果是否能够被左边的类型容纳,你在输入的时候就能知道。
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'
这个不是这样理解的,等号两边存在等级关系,但是是不能比较的,等号左边b的类型是你在前面已经声明了的是不能变的,18是int类型,但是它表示的是unicode表中字符a往后的第18个位置所表示的字符,如果你在前面声明的b是int类型,那么等号左边就是int类型,如果右边不变,a就是97