自动类型转换:低级向高级转换
1. short s=5;
2. s=s-2;
3. char c='a';
4. int i=23;
5. double d=0.314;
6. double resoult= b+c+i*d;
7. int val=3;
8. int intResult=23/val;
9. system.out.println('a'+7+''Hello World!'')//输出 104HelloWorld!
10.System.out.println("Hello World"+'a'+7)//输出 Hello Worlda7
上述表达式中 第二行代码无法编译成功,原因在于s 是short类型的变量,但是s-2 中的2为int类型,s-2表达式的类型就是int类型,s此时转换为int类型了,而第6行代码则是正确的,d的等级最高,double类型,因此该表达式类型是double类型,第8行的代码也是正确的,intResult的值等于7,因为23/val不能整除,但是val是int类型,但表达式类型依然保持为int类型.
第9行中 'a'+7,首先'a'转为int类型,然后和+7为104 当基本类型值104和String类型进行连接运算时,基本类型的值自动转换为String类型,然后+连接运算符才起作用.
复合赋值运算符
short s=5; s=s-2; 编译错误,此时若要计算,可以使用复合赋值运算符 比如
short s=5; s -=2;
不过,复合赋值运算符包含了一个隐式的类型转换:
a=a+5 ; a+=5;
a+=5 等价于 a=(a的类型)(a+5);因此,若结果的类型与该变量的类型相同,转型不会有影响,但是若结果值的类型比该变量的类型要大,那么复合赋值运算符将会执行一次强制性类型转换,将会造成高位的"截断"