Java中数据类型的自动转换与强制转换
在开发程序时我们会经常的将某种数据类型转为其他数据类型。转换过程中分为以下情况:
1.java编译器自动帮我们进行转换->隐式转换(条件符合要求) <-(自动类型转换)
需满足以下条件:
需要原数据类型与被转换的数据类型兼容
被转换的数据类型大于原数据类型
2.手动强制进行数据类型的转型-> 强制转换 <-又被称为缩小转换(可能造成数据损失)
使用以下格式进行转换
(被转换的数据类型) 变量名 =(被转换的数据类型)(原数据类型 | 原数据类型字面值)
一 .自动类型转换
在Java中数据类型型会在合适的情况下进行自动转换
代码如下(自动转型):
byte a = 70;
byte bb = 80;
byte c = 90;
//a乘b的结果已经超出了byte表达范围,(java编译器自动转为int型)
int i1 = a * b /c ;
float f1 = 39.343f;
float f2 = 32.11f;
// f1 和 f2 的值没有超出 float类型但可以正常的赋值给double(java编译器自动转为double型)
double d3 = f1 * f2;
//误区
//虽然 bbb 乘以 2 的值并没有超出 表达范围 但下行代码仍然保错
byte bbb = 20;
// bbb = bbb *2 ; 本行代码保错,原因请看下面注释:
//这是因为 java 的自动类型提升机制
/*java的类提升机制:byte short char 提升为 int
* 有一个操作数为long则整个表达式为long
* 有一个操作数为float则整个表达式为float
* 有一个操作数为double则整个表达式为double
* 所以上面的 bbb 变量 进行乘法运算 被提升为了int(无法再容纳自身的byte类型所以保错)
* ------------如果以上多个类型存在则按照运算顺序进行提升-------
* */
二.强制类型转换(缩小转换)
扩大转换java编译器已经帮我们做了 (〃‘▽’〃)
代码如下(示例):
//以下将int 型 257 强制转换为 byte
byte b ;
int i = 257;
b = (byte) i;
//发生了值溢出情况,等于 i % byte类型范围的绝对值之和 = 1;
System.out.println("将int 257 强转为byte后= "+ b); //输出结果为1
//将浮点数转为整形将发生截尾操作
int tempInt = (int) 3.14; // 3
//将整数转为浮点数会在小数位补0,
double tempDouble = (double) tempInt;// 3.0
//特别说明 boolean值不能参与任何类型转换!!!