2020-12-05

JAVA隐式转换与强制转换

前言

想完全明白不同数据类型之间的转换必须先了解什么是隐式转换和强制转换。

一、为什么有隐式转换和强制转换?

JAVA作为强类型编程语言,当不同类型之间的变量相互赋值的时候,会涉及的数据的精度不同问题,而解决这个问题就产生了隐式转换和强制转换。

二、简介与使用

  以下“范围大”或“范围小”指的是变量类型占比特位个数或者字节个数。

1.隐式转换

当范围小的类型变量赋值给范围大的类型的变量时要发生隐式转换,具体步骤是要先把范围小的变量转换成对应范围大的变量所占比特位个数的变量,然后将此变量赋值给其他变量。此过程机器自动执行。

a占四个字节,32个比特位,b是long类型,占八个字节,64个比特位,a可以直接赋值给b,但是b不能直接赋值给a。
因此a会被自动转换成范围大的long类型,而范围大的long类型不能自动转换为范围小的int类型。

2.强制转换

那么范围大的类型变量怎么赋值给范围小的类型变量呢?
这里要涉及到程序猿自己使用强制转换。
怎么使用呢?看代码:
在这里插入图片描述
由代码看出,只需在范围大的类型变量前加上要转换成的所需类型即可。
但是这么做会有缺点:精度丢失。
举个例子:
在这里插入图片描述
运行结果:
在这里插入图片描述
由此看到,把double类型的a强制转换成int类型的b,会发生精度丢失问题,这是强制转换的第一个缺点。
另一个缺点是:强制转换还不一定能成功。
比如整数类型的变量和boolean类型的变量之间不可进行强制转换。
在这里插入图片描述
如图红色波浪线的地方便是报错问题处。

总结

1.不同数字类型的变量之间的赋值会发生隐式转换或强制转换。
2.表示范围小的类型能隐式转换成范围大的类型,不需要JAVA程序猿们考虑。
3.把范围大的类型赋值给范围小的类型需要强制转换,但是可能造成精度丢失。不建议使用。
4.不是所有不同变量之间都可进行强制转换。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值