前言
在学习运算符的时候会遇到两个名词,一个是隐式类型转换,一个是强制类型转换
隐式类型转换也就是取值范围小的数值赋值给取值范围大的变量
int a = 10;
double b = a;
强制类型转换就是将取值范围大的一个数值直接赋值给取值范围小的变量
double b = 10.0;
int a = (int)b;
java中数值类型的范围大小比较:
double > float > long > int > short > byte
隐式转换:
隐式转换的提升规则
取值范围小的和取值范围大的进行运算时,取值范围小的会先提升为大的,再进行运算
例如:
int类型的a 与 double类型的b求和时,a先转换成double类型,此时a的数值为3.0,最终输出结果就是13.2
double b = 10.2;
int a = 3;
System.out.println(a+b);
byte short char 三种类型的数据在计算时,都会先提升为int类型,然后再进行运算
byte类型的a 与 short类型的b 运算时,a跟b都会先转换成int类型,然后再进行运算
byte a = 10;
short b = 20;
System.out.println(a+b);
强制类型转换:
强制转换可能会导致数据错误
格式:目标数据类型 变量名 = (目标数据类型) 被强转的数据
int a = 128;
byte b = (byte) a;
System.out.println(b);
上述将 int 强制转换成 byte ,byte类型的数值取值范围为 -128 -127 ,此时数据发生错误:
练习:
我现在需要a 与 b的和转换成byte类型
byte a = 12;
byte b = 14;
在强制类型转换时,一定要明确强转的到底是谁,例如下面这段代码,这是错误的
byte a = 12;
byte b = 14;
byte c = (byte)a + (byte)b;
正确的写法应该是,将a与b的和进行强转,并且byte类型的 a与b求和时,会自动提升至int类型来求和,也就是此时 a+b的和是int类型,所以需要强制类型转换
byte a = 12;
byte b = 14;
byte c = (byte)(a + b);
标签:类型转换,java,int,double,类型,byte,取值,隐式
From: https://blog.csdn.net/QQBongBong/article/details/140407978