我们都知道类型转换有两种,一种是自动类型转换,由低字节转向高字节(long型转向float型除外,由于浮点型存储方式的原因,四字节的float型能够表示的取值范围会远远大于八字节的long型),一种就是强制类型转换,需要我们手动转换,例如int a = (int)3.14,结果是整数3。在我们开始之前,我们先来确定一下程序中的整数的默认类型是不是int型,如图程序
可以看出整数超过int型的最大值是会报错的,加上L后是不会的,可以得出int型确实是整数的默认类型,而且可以知道加上L相当于向long型的转换,再赋值给int型就要强制转换了。
既然我们得出了int型是整数的默认类型对于下面的程序我们就有疑问了
按理来说,既然整数都是int型,把数赋值给byte型变量a和short型变量b应该会报错的,但是结果并没有。可以猜测是不是存在自动强制类型转换,但是这种转换是在数据值满足在较小类型的取值范围之内可以允许的,就是将1赋值给byte型,哪怕1默认是int型,但是转换后大小并没有影响,而大于较小类型最大值的数并不会这样,依然是默认的int型
可以看到这里的128是大于byte型最大值的,依然还是默认为int型。不过这种转换的允许只会出现在数字字面量上,也就是上面的1,10,127这样的数字,对于如果你把1赋值给int型变量a,在把a赋值给byte型变量,依然需要手动的强制转换。