查看: 63|回复: 0

Java基础教程012- 类型转换

[复制链接]

4

主题

8

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2023-7-21 17:04:37 | 显示全部楼层 |阅读模式
在Java程序中,会存在不同类型的数据需要一起参与运算,所以这些数据类型之间是需要相互转换的,主要分为两种情况:自动类型转换和强制类型转换。
1.自动类型转换

将一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量。这种转换方式是自动的,直接书写即可。例如:
double num = 10; // 将int类型的10直接赋值给double类型
System.out.println(num); // 输出10.0


byte a = 12 ;
int b = a;// 将byte类型的变量b转换成了int类型
System.out.println(b); // 输出12上述代码中,因为int类型的取值范围大于byte类型的取值范围,所以编译器在赋值过程中不会造成数据丢失,能够自动完成类型的转换。
除此之外,还有很多数据类型之间可以进行自动类型转换,例如:
(1)整数类型之间可以实现转换,如byte类型的数据可以赋值给short、int、long类型的变量,short类型的数据可以赋值给int、long类型的变量,int类型的数据可以赋值给long类型的变量。
(2)整数类型转换为float类型,如byte、short、int类型的数据可以赋值给float类型的变量。
(3)其它类型转换为double类型,如byte、char、short、int、long、float类型的数据可以赋值给double类型的变量。
2.强制类型转换

将一个表示数据范围大的数值或者变量赋值给另一个表示数据范围小的变量时,自动类型转换无法进行,必须进行强制类型转换。例如:


如上图,程序报错,出现错误的原因是将一个int型的数据赋值给byte类型的变量b时,由于int类型的取值范围大于byte类型的取值范围,这样的赋值会导致数值溢出,也就是说一个字节的变量无法存储四个字节的整数值。
在这种情况下,就需要进行强制类型转换,强制类型转换格式如下:
目标数据类型 变量名称 = (目标数据类型)值或者变量;
将示例代码修改如下,程序便不会报错。


需要注意的是,在对变量进行强制类型转换时,会发生取值范围较大的数据类型向取值范围较小的数据类型的转换,如将一个double类型的数值转换为int类型,这样做极容易造成数据精度的丢失。例如:


多学一招:表达式的自动类型转换

所谓表达式就是指由变量和运算符组成的一个算式。在程序中通常会有很多不同类型的变量或者数据一起运算,我们称之为表达式。最终表达式的结果数据类型是需要确定的,也要遵循一定规则,这样我们才能知道用什么类型的变量去存放最终的结果数据。
在表达式中,小范围类型的变量会自动转换成当前较大范围的类型再运算。如一个byte类型变量在运算期间类型会自动提升为int类型。
注意:

1. char类型的数据转换为int类型是按照ASCII码表中对应的int值进行计算的。比如在ASCII码表中,'a'对应97。
int a = 'a';
System.out.println(a); // 将输出971. 整数默认是int类型,byte、short和char类型数据参与运算均会自动转换为int类型。
byte b1 = 10;
byte b2 = 20;
byte b3 = b1 + b2; 第三行代码会报错,b1和b2会自动转换为int类型,计算结果为int类型,将int类型赋值给byte类型需要强制类型转换。
应修改为:
int num = b1 + b2;或者:
byte b3 = (byte) (b1 + b2);1. boolean类型不能与其他基本数据类型相互转换。
本节练习

下列选项中,按照箭头方向,不可以进行自动类型转换的是( )。
A、byte → int
B、int → long
C、double → long
D、short → int

<hr/>

评论区留下你的答案吧!
如果你觉得我的分享对你有用,那就关注我吧,持续更新中……
有关Java学习问题欢迎私信哟~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表