Java强制类型转换

强制类型转换

​ 只有把数值转换为同一类型后才能进行运算。

​ byte,short,char->int->long->float->double(优先级由低到高,实际上是和容量有关且小数的优先级大于整数)。

  • byte:1B

  • short:2B

  • char:2B

  • int,float:4B

  • long:8B

  • double:8B

​ 1B即为1字节,1字节有8位,所以不同数据类型所能表示的数的范围是有限且不同的(计算机组成原理知识),当低转高时系统会自动进行,但是当高转低时需要进行强制类型转换。

溢出问题

​ 高转低时还应注意溢出问题:

int i=128;
byte b=(byte)i;//强制类型转换,但是注意byte型只有8位,会产生内存溢出
System.out.println(i);
System.out.println(b);

​ 上述代码将int类型强制转换为byte类型,但是byte只有8位无法表示128(计组知识不再赘述),所以转换后的输出结果不是原值。

低–>高

​ 低转高可以直接进行,不需要强制类型转换,因为本身高优先级能表示数的范围比低优先级的大。

int m=128;
double n=i;//double类型自动转换了
System.out.println(m);
System.out.println(n);

精度问题

​ 当把float或double强制转换为int时会造成精度的缺失,因为本身int是表示整数的。

System.out.println((int)23.7);//会直接省略小数;
System.out.println((int)-45.29f);

字符类型的转换

​ 前面的文章已经说过字符本质上是数字。所以字符类型可以和int型数据直接进行计算(低->高可以自动转换),而将int类型数据转换为char类型时进行强制类型转换可以输出数字对应的字符。

char c='a';
int d=c+1;//低转高,自动转换为int类型
System.out.println(d);
System.out.println((char)(d));//高转低要强制转换

Tips:

  1. 不能对布尔值进行转换。
  2. 不能把对象类型转换为不相干的类型。(比如把string类型转换为int类型是不可取的)
  3. 把高容量转换到低容量时要强制类型转换,而且可能产生内存溢出或者精度问题

资料来源:b站搜索“遇见狂神说”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值