Java语法+=常量和变量的运算
程序员文章站
2022-04-03 15:59:19
扩展知识点+= 符号的扩展常量和变量的运算+= 符号的扩展下面程序有问题吗?public static void main(String[] args){short s = 1;s+=1;System.out.println(s);}分析: s += 1 逻辑上看作是 s = s + 1. 计算结果被提升为int类型, 再向short类型赋值时发生错误, 因为不能将取值范围大的类型赋值到取值范围小的类型. 但是, s = s + 1进行两次运算, += 是一个运算符, 只运算一次,...
+= 符号的扩展
下面程序有问题吗?
public static void main(String[] args){
short s = 1;
s+=1;
System.out.println(s);
}
分析: s += 1 逻辑上看作是 s = s + 1. 计算结果被提升为int类型, 再向short类型赋值时发生错误, 因为不能将取值范围大的类型赋值到取值范围小的类型. 但是, s = s + 1进行两次运算, += 是一个运算符, 只运算一次, 并带有强制转换的特点. 也就是说 s += 1 就是 s = (short)(s + 1), 因此程序没有问题编译通过, 运行结果是 2.
常量和变量的运算
下面的程序有问题吗?
public static void main(String[] args){
byte b1=1;
byte b2=2;
byte b3=1 + 2;
byte b4=b1 + b2;
System.out.println(b3);
System.out.println(b4);
}
分析: b3 = 1 + 2 , 1 和 2 是常量, 为固定不变的数据, 在编译的时候 ( 编译器 javac ), 已经确定了 1 + 2 的结果并没有超过 byte 类型的取值范围, 可以赋值给变量 b3, 因此 b3 = 1 + 2 是正确的.
反之, b4 = b2 + b3, b2 和 b3 是变量, 变量的值是可能变化的, 在编译的时候, 编译器 javac不确定 b2 + b3 的结果是什么, 因此会将结果以int类型进行处理, 所以int类型不能赋值给byte 类型, 因此编译失败.
本文地址:https://blog.csdn.net/weixin_46274168/article/details/109893710