2020-12-05
Posted 自由乐土
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.不是所有不同变量之间都可进行强制转换。
以上是关于2020-12-05的主要内容,如果未能解决你的问题,请参考以下文章