Java基础学习笔记 - Day02 - 第五章 拓展知识点

Java基础学习笔记 - Day02 - 第五章 拓展知识点

系统:Win10
JDK:1.8.0_121

5.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

5.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,12 是常量,为固定不变的数据,在编译的时候(编译器javac),已经确定了 1 + 2 的结果并没有超过byte的取值范围,可以赋值给变量 b3,因此 b3 = 1 + 2 是正确的
反之,b4 = b1 + b2b2b3 是变量,变量的值是可能变化的,在编译的时候,编译器javac不确定 b2+b3 的结果是什么,因此会将结果以int类型进行处理,所以int类型不能赋值给byte类型,因此编译失败

猜你喜欢

转载自blog.csdn.net/qq_35132089/article/details/107871655
今日推荐