java 原生数据类型的转换_「Java」基础08:数据类型的转换

a68b9173669b8d561c22814a704c5a45.png

基本数据类型有四类八种,相互之间有着包含与被包含的关系。

比如9,它既可以是字节型,也可以是短整型,也可以是整型,长整型,甚至还可以是一个字符。

那他们之间是如何转化的呢?

一、自动转换

看下面例子:

31d9a04368eb58fe1c26f3cda8f1b833.png

2和2.0,在我们的认知中,可能就觉得它们其实就是一回事,但是在Java世界里,它们对应不同的数据类型。

2这个常数默认是int类型的,当它赋值给一个double类型的时候,输出时就会自动转换。

代码执行过程中取值范围小的类型自动转换为取值范围大的类型。

其中大小范围如下:

byte、short、char < int < long < float < double

再看一个例子:

4f500aaed2868753edf723eeda495c86.png

1,它既可以是byte、也可以是short、char、int、long,但是在运算时会自动转换成int。

所以:b1+b2=2(这个2是int类型)

无法将int类型的数值赋值给byte类型。

同理我们可以依次证明

byte、short、char运算时直接提升为int。

二、强制转换

前面我们将一个int类型的数据赋值给一个double类型,它会完成自动转换。

那反过来会怎么样?

b8c6640d875e94748337054e1c52266f.png

1.2默认是double数据类型,当把一个double数据类型的数据赋值给一个int类型时,编译会报错。

这个时候我们就需要强制转换了

由此我们可以理解强制转换的概念:

自动转换是取值范围小的类型自动转换为取值范围大的类型强制转换是取值范围大的类型强制转换成取值范围小的类型转换格式:

int i=(int)1.2;

数据类型 变量名 = (数据类型)被转数据值;

也就是一个括号加上需要强制转换的数据类型,强制转换后会发现,i从1.2变成1了。

e4a36e86160d98834a337b7686286dca.png

综上我们可以发现:自动转换时是Java自动执行的不需要我们参与,而强制转换需要我们自己手动执行。

转换原理:

前面我们学习了字节,其取值范围为[-128,127]

忘记了,可以做个回顾:基本数据类型

定义一个byte类型的变量,赋值一个在它范围之外的一个数,比如257

a7fd86e65945bd9ecb23f5e0c88ea956.png

结果为何为1?

257超过了byte类型的取值范围,默认为int类型,int类型4个字节,也就是32位。

强制转换为byte类型,会丢失前三个字节的数据。

77ee6dd479d033ad97cc88472f267c1c.png

故:强转有风险,操作需谨慎

精度损失:浮点转成整数,直接取消小数点,可能造成数据损失精度。数据溢出:int强制转成byte砍掉3个字节,可能造成数据丢失。三、ASCII编码表

在学习二进制中我们便知道了计算机底层都是二进制数据(0和1)

那如何让计算机识别人类的文字呢?

于是就产生出了编码表的概念。

编码表就是将人类的字符和一个十进制数进行对应起来组成一张表格。

表中每个字符都对应了一个十进制数值,如下:

f4eacc6457d370206cdcbb2cb3444255.png

记住最常见的几个:

字符0对应数字48字符9对应数字57大写字母A对应65大写字母Z对应90小写字母a对应97小写字母z对应122PS:0~9是字符时,也有对应的十进制数字

每个字符都对应一个数值。如果要进行数值运算,字符可以 代表其对应的数值,比如char转int:

int i ='0';//此时'0'是一个字符而不是一个数字

System.out.println(i);//结果是48

System.out.println('0'+1)//结果是49

e7a9ac7c1d814c4a156a110ff9fafaf9.png

总结:

d54496f837047993bf65c16c7d1602ef.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值