short和byte直接赋值整形,如果整形在其承受范围内就可以进行隐式转换,所以可以直接赋值
byte b=1;//合法
byte b=128; //非法
但是3.14不是也应该在float范围内吗,不能进行隐式转换吗?答案是3.14确实不在float的范围内,并且也不在double的范围内,float和double都无法表示出准确的3.14,3.14在计算机中是一个无限长度的的二进制(如果计算机允许)。
所以float = 3.14f,把一个64位的数转换成32位的数字会损失后面的精度,转换之后两数字就已经不再相等,
double a = 3.14;
float b = (float)a;
double c = (double)b;
if(a != c) return "不等";//可以进行验证
但是short a = 1;这个确实可以不损失正确性的的将int型号转换成short类型。