因为第一个char c = 'a'+5 做了一个运算。已经定义的char类型c变量,char类型值'a'和int类型5,运算过程中,值'a'自动转换成int类型的数值,然后和5做加法运算,运算完毕,在把结果输出。注意的一点,char是低精度的,如果可以的话,你打印一下c的数据类型,应该是int类型。
第二个问题,虽然你截图错了,还是能懂你问的是什么意思。
int a = 5; char c = a +'a'; 由于你指定了a变量的类型是int,值是5。而自动转换自动是从低精度向高精度转换的。在已经定义了int类型变量a的情况下,和已经定义的char做加法运算,会编译异常,注意,是编译异常。原因是没有办法把int类型向低精度自动转换成char类型。
区别:java虚拟机对①进行编译,没有语法错误,逻辑错误。编译通过,运行计算时发现需要类型转换,于是进行了隐藏的类型转换。
java虚拟机对②进行编译,发现程序员要把int类型向char类型转换,这样做的结果可能照成数据精度丢失,为了避免重大数据错误,不允许编译通过。
|