Java基础07(类型转换)

Java基础07

类型转换(类型兼容)

在Java中,数据是一个很重要的基础,而数据的使用,也是一个重点,而数据使用其中的一个重点,就是类型转换,这一章重点介绍类型转换

类型转换
在这里插入图片描述

类型转换分类两类:
自动转换以及强制转换

什么是类型转换?
不同的类型之间,发生了某种运算,因而将对应的数据,转为相应的类型

自动转换

自动转换(思维导图)
在这里插入图片描述
自动转换(隐式转换)是什么?
自动转换,意为不需要人的操作,机器自己会转变数值的类型,而自动转换也可以叫做隐式转换,因为它在后台进行了自动的转换,而不需要你的输入自行就可以完成的转换。

赋值
赋值:int 常量可以给 byte/short 变量赋值,但是不能超范围
变量赋值:byte->short->int->long

1.整型运算
byte/short/int 他们之间进行预算,byte/short 可以自动转换为 int
byte/short/int 与 long 运算,byte/short/int 转为 long, 结果也为 long
总的来说:小范围的与大范围的进行运算,值就往大范围的靠,会自动转换为大范围的值;向大的靠齐。

运算过程
byte->short->int->long
byte/short+int要做算术运算(+),结果会自动转为int
byte/short+byte要做算术运算(+),结果会自动转为int
byte/short/int+long要做算术运算(+), 结果为long型
类比其他:小范围和小范围,或者小范围和大范围的运算->大范围;输出值的类型,与参与运算的最大数据类型相同。

2.浮点型运算
float/double相互进行运算,结果与整型的转换一样,也是往范围大的转,而浮点型的转换,就是朝着double类型转换。

运算过程
float->double
float/double+float要做算术运算(+),结果为double型
float/double+double要做算术运算(+),结果为double型

3.整型与浮点型进行混合运算
既然整型与整型可以进行运算,浮点型与浮点型也同样可以进行运算,那么它们两个类型的在一起运算能执行?
它们都属于基本数据类型,同属于一个大类型,按道理来说,应该是可以进行运算的,只是运算的时候,输出的值表示的类型也会转换而已。

混合运算过程
byte->short->int->long->float->double
byte/short/int/long+float要做算术运算(+),结果为float型
byte/short/int/long+double要做算术运算(+), 结果为double型
byte/short/int/long/float+double要做算术运算(+),结果为double型

4.自动转换小结
从前面的介绍可以看出来,只要是基础数据类型之间进行运算,那么结果都会朝着参与运算的范围最大的类型自动转换,整型之间进行运算,有一个特殊的地方,就是byte与short型进行运算时,一般转化为int型,其他的都是一样的,朝着最大的转换,整型最大的类型,就是long类型,浮点型最大的就是double型,数值型,最大的类型也是浮点型的double。

强制转换

强制转换(思维导图)
在这里插入图片描述
强制转换是什么?
强制转换,顾名思义,适用于不能自动转换的时候,因为一般数据进行运算都会朝着范围大的值去输出,那如果想让输出的值变小呢,或者变一个类型?
比如说,我用short与int相加,输出的值一般自动转换为int型,但是如果我想让输出的值变为short型的话,这时候就需要借助外力来改变这个类型,而强制转换,也就因此诞生了。

强制转换的关系式及用法
关系式:目标类型 变量名 1=(目标类型)变量名 2;
假如我有一个short类型的值s,我想把它转换为byte类型的值b,根据关系式可以得到:
byte b = (byte) s;
关于关系式的理解:目标类型为我想要的类型,变量名1为想要类型的名称,变量名2为初始类型的名称。

思考题
假如我有一个数a,它的值为10,是int类型的,如果我要把a转换为byte与short型,怎么转?
思考:
①.重述需求:他给我一个固定的值10,而且这个数值是int类型的,而且需要我把它转换为byte与short型。

②.任务拆分:
第一步:因为客户给的是int类型的a,所以我首先要考虑的是如何给a的值定义为int类型,结合前面学的基本数据类型,所以我可以给a定义为int类型,所以我输出:int a = 10;
第二步:现在有byte、short类型,我们分别给他用一个符号来表示:b(byte)、s(short)
第三步:客户让我把a转换为byte与short型,在已有a为int类型的基础之上,我要转换它的类型,可以用强制转换来完成,所以我可以使用关系式(目标类型 变量名 1=(目标类型)变量名 2;)来完成。

③.实现:
int a = 10; (int的声明+初始化)
byte b = (byte) a; (这一步表示把a强制转换为b,int 变量需要强制转化,才能给 byte 变量赋值)
short s =(short)a; (int强制转换为short)

代码整理:
int a = 10;
byte b = (byte) a;
short s = (short) a;

强制转换的适用范围
前面介绍的自动转换是在数值型之间进行完成的,一般都是往大的范围转,那么想往其他数值型转的话,我们有强制转换这种选择,那如果数值型与其他基本类型呢,可以相互转换吗?

举几个例子
以char为例,它与其他类型的转换
设char为c、byte为b、short为s、int为i、long为L。
byte b = 97;
short s = 97;
int i = 97;
long = 97;
我们有:
char c1 =(char)b;
char c2 =(char)s;
char c3 =(char)i;
char c4 =(char)L;
然后输出c1、c2、c3、c4
如图所示:
在这里插入图片描述
由上图可以看见,数值型和字符型是可以实现转换的,但是数值型转换过去之后,输出却是的字符型的值,以97为例,输出的就是小写的a。

以Boolean型为例,它与其他类型的转换
设char为c、byte为b、short为s、int为i、long为L、boolean为 B;
byte b = 97;
short s = 97;
int i = 97;
long = 97;
char = 97;
我们可以输出:
boolean c1 = (boolean) b;、
boolean c2 = (boolean) s;
boolean c3 = (boolean) i;
boolean c4 = (boolean) L;
boolean c5 = (boolean) c;
然后输出c1、c2、c3、c4、c5
如图:
在这里插入图片描述
从图上可以看出,如果强制转换,会报错,那为什么会报错,让我们再思考一下boolean类型的定义,boolean类型,只有两种值,一个是true,一个是false,而我们转换过去的是数值,所以两者不兼容,不能转换,所以我们可以得出,boolean类型不能与其他基本类型进行转换。

基本类型与引用类型的转换
数据类型分为基本数据类型与引用类型两种,但是目前所学的知识当中,它们是两种类型,类型不同,类型不兼容,所以不能够相互转换。

类型转换(总结):

1.自动转换注意事项
①:自动转换发生在基本数据类型,一般在数值型用的比较多,如果有范围大的类型参与运算,系统会自动地给你转换成范围较大的数值输出。
②:自动转换时,float 到 int,float 到 long,double 到 int,double 到 long 等由浮点类型转换成整数类型时,是不会自动转换的,不然将会丢失精度。
③:整型最大的类型,就是long类型,浮点型最大的就是double型,数值型,最大的类型也是浮点型的double。

2.强制转换注意事项
①:强制转换适用于自动转换不能满足自己的需要时使用,强制转换可以在基本类型除了布尔类型的其他类型之间使用。
②:强制转换的关系公式:
目标类型 变量名 1=(目标类型)变量名 2
③:基本类型与引用类型不能强制转换,因为类型不兼容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值