首页 Java学习📘

Java基础篇——(8)拓展知识点

一、关于+=符号的拓展

有这样一个程序:

public static void main(String[] args){
    short s = 1;
    s += 1;
    System.out.println(s);
}

分析s += 1从逻辑上看作是s = s + 1,计算结果被提升为了int类型,然后再向short类型进行赋值,这样便发生了错误,因为不能将取值范围大的类型赋值给取值范围小的类型,所以程序不能运行。

但是!复合赋值运算符其中隐含了一个强制类型转换

也就是说,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 + 212都是常量,为固定不变的数据,在编译的时候(编译器javac),已经确定了1+2的结果没有超出byte的取值范围,可以赋值给b3,因此b3 = 1 + 2是正确的。

反之,b4 = b1 + b2b1b2是变量,变量的值是可能变化的,在编译的时候,编译器javac不确定b1+b2的结果是什么,因此会将结果以int类型进行处理。由于int类型不能赋值给byte类型,因此编译失败。

在IDEA中体现:

image-20200806231521136




文章评论

目录