问题:将一个整型的常量(字面值为int)赋给一个byte或者short类型的变量,只要不超过byte或short取值范围,就可以通过编译,但是将一个浮点型的常量(字面值的double)赋给一个float类型的变量,即使不超过float的取值范围也会编译错误
1:在java中默认整型为int类型,默认浮点类型为double类型,例如byte a = 1; 虽然默认1是int类型,但是会隐含默认转换,只要不超范围就不会有错。
2:整型的高低位转换仅仅是字面量才不会编译错误,如果使用变量,编译器是无法识别。
3:整型的高位向低位转换就是暴力的把前面的位干掉,例如 long转int就是把 long的高32位干掉,但浮点类型标识的是精度小数,所以没有办法按照去截取头部的位,而double在转float时,会开启8个字节来存放,必须加上F标识创建4个字节的空间才能赋值。