a. byte b = 1 + 1;
b. byte b = 1; b = b + 1;
c. byte b = 1; b = b += 1;
d. byte b = 1; b = ++b;
这个题,那个是对的呢?
a中,b=2,byte中能容的下2,
b中,是二次运算,b要转换成int型,加1再赋值给b,精度丢失
c中,是一次运算,运算速度比b要快,隐藏了一个强制类型的转换,b= (byte)b+1;
d中,也隐藏了一个强制类型的转换
这里涉及到类型的转换,由低精度转换到高精度的话,没什么问题,但是由高精度转向低精度的话,就有问题了,会发生精度的丢失
所有的byte型、short型和char的值将被提升到int型。
整数默认的是int型,小数默认的是double型的,所以flout型一定要加上f
如果一个操作数是long型,计算结果就是long型;
如果一个操作数是float型,计算结果就是float型;
如果一个操作数是double型,计算结果就是double型。
自动类型提升
byte b = 3;
int x = 4;
x = x + b;//b会自动提升为int类型进行运算。
强制类型转换
byte b = 3;
b = b + 4;//报错
b = (byte)(b+4);//强制类型转换,强制将b+4的结果转换为byte类型,再赋值给b。
如果要输出一个比较大的整数,在后面加上L,防止精度的丢失,因为整数默认的是int型,小数默认的是double型的
小数的话,后面加上f,证明是flout型。