关于类型的转换

来源:互联网 发布:恒星寿命知乎 编辑:程序博客网 时间:2024/05/21 10:19

以下代码哪个是正确的?为什么?

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型。




0 0
原创粉丝点击