2.4.5-Java语言基础(类型提升&强制转换)

自动类型转换(也叫隐式类型转换)
强制类型转换(也叫显式类型转换)
类型转换的原理
什么时候要用强制类型转换?

表达式的 数据类型自动提升
•  所有的byte型、short型和char的值将被提升到int型。
•  如果一个操作数是long型,计算结果就是long型;
•  如果一个操作数是float型,计算结果就是float型;
•  如果一个操作数是double型,计算结果就是double型。
分析
•  System.out.println(‘a’) 与System.out.println(’a’+1) 的区别 。


自动类型提升
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。

思考 :
byte b1=3,b2=4,b;
b=b1+b2;
b=3+4;
哪句是编译失败的呢?为什么呢?

在Java中,byte类型数据在运算之前要转换成int类型数据。
比如:
byte a=1;
byte b=2;
byte c;
c=a+b; //这样是计算不出c,是错误的
c=a+1; //这样也是不能计算c的
c=64+1; //为什么这样就能计算c,在Java中这是什么原理啊?

运算符对基本类型的影响 

当使用+、-、*、/、%运算符对基本类型进行运算时,遵循如下规则: 

只要两个操作数中有一个是double类型的,另一个将会被转换成double类型,并且结果也是double类型; 
否则,只要两个操作数中有一个是float类型的,另一个将会被转换成float类型,并且结果也是float类型; 
否则,只要两个操作数中有一个是long类型的,另一个将会被转换成long类型,并且结果也是long类型; 
否则,两个操作数(包括byte、short、int、char)都将会被转换成int类型,并且结果也是int类型。 

c=a+b时,符合第四个项,a+b的结果将转为int类型,把int赋值给byte是不可以的
c=a+1时,同样符合第四项
至于c=64+1,64+1是个在编译时就可以确定的常量,而且范围没有超出byte的取值范围,这个关系式就相当于c=65,因而不会报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值