/*
强制类型转换:
1. 对于byte/short/char三者来说,只要右侧不超过数据范围,那么编译器(javac)会自动帮我们添加一个(byte)(short)(char)
如果超过了左侧范围,那么直接报错。
2. 复合赋值运算符,其中也隐含了一个强制类型转换。
3. 编译器的常量优化
如果一个表达式当中全都是常量,那么编译的时候(javac)会直接计算出来结果,不会等到运行的时候再计算。
1. 对于byte/short/char三者来说,只要右侧不超过数据范围,那么编译器(javac)会自动帮我们添加一个(byte)(short)(char)
如果超过了左侧范围,那么直接报错。
2. 复合赋值运算符,其中也隐含了一个强制类型转换。
3. 编译器的常量优化
如果一个表达式当中全都是常量,那么编译的时候(javac)会直接计算出来结果,不会等到运行的时候再计算。
*.java --> 编译 --> *.class --> 运行
3 + 3 6
*/
public class Demo13Ext {
public static void main(String[] args) {
int num1 = 10;
num1 += 3;
System.out.println(num1); // 13
byte num3 = /*(byte)*/ 127;
// int --> short
short num2 = 20;
// short + int --> int + int --> int
num2 += 1; // num2 = num2 + 1
System.out.println(num2); // 21
System.out.println("=============");
// int + int --> int
// 在.class文件当中,只有结果13,没有表达式,因为全都是常量,结果必然是可预测的常量
short num4 = 10 + 3;
// 下面这种写法有变量参与,所以不再进行编译器的常量优化
short num5 = 10 + num1;
}
}
3 + 3 6
*/
public class Demo13Ext {
public static void main(String[] args) {
int num1 = 10;
num1 += 3;
System.out.println(num1); // 13
byte num3 = /*(byte)*/ 127;
// int --> short
short num2 = 20;
// short + int --> int + int --> int
num2 += 1; // num2 = num2 + 1
System.out.println(num2); // 21
System.out.println("=============");
// int + int --> int
// 在.class文件当中,只有结果13,没有表达式,因为全都是常量,结果必然是可预测的常量
short num4 = 10 + 3;
// 下面这种写法有变量参与,所以不再进行编译器的常量优化
short num5 = 10 + num1;
}
}