不懂,他们不是只是精确位数和占用大小不一样吗
涉及(计算)自动转型,char、byte计算时转成int(没有比int范围更广的long和精度更高的浮点数参与),其他的就是向精度更高的转型,int与long计算转型成long,int与float/double计算转型成float/double,float与double转型成double
这里,我想sum应该是个整型吧(int/long),在计算double avg = sum/4; 时sum为int或long,除以4被转型为int/long类型,然后被赋值给精度更高的double类型,然而整型是没有浮点数部分的,因此小数部分在后面计算(sum/4)时就已经被丢弃了,只保留了整数部分并赋值给double
而float avg = sum/4f;后面sum/4f时明确指定了除数是一个float类型的浮点数,那么这个计算会被转型成精度更高的float进行计算(即把sum也作float类型进行除运算),因此结果会保留到float所允许的浮点数精度范围内
第一个是 (double)(sum/4)
第二个是 (float)((float)sum/(float)4)