学习笔记,仅供参考
文章目录
- JAVA基础语法
- 数据类型转换之隐式转换
- 数据类型转换之强制转换
JAVA基础语法
数据类型转换之隐式转换
byte类型转换为int类型
class TypeConvertTest {
public static void main(String[] args) {
int x = 3;
byte b = 5;
x = x + b;
System.out.println(x); // int类型 + byte类型 -> int类型
}
}
这里byte类型的b与int类型的x相加时,b先将自己提升为int类型,再与x相加,得到int类型的结果,最后赋值给x。
这就是隐式转换,当小的数据类型(比如byte)与大的数据类型(比如int)相加时,小的数据类型会自动提升为大的数据类型。
数据类型转换之强制转换
如果我们这样写代码,会得到怎样的结果呢?
class TypeConvertTest {
public static void main(String[] args) {
int x = 3;
byte b = 5;
b = x + b;
System.out.println(b);
}
}
结果:
---------- javac ----------
TypeConvertTest.java:5: 错误: 不兼容的类型: 从int转换到byte可能会有损失
b = x + b;
^
1 个错误
Output completed (5 sec consumed) - Normal Termination
程序在编译时报错了!这是为啥呢?因为x + b得到的结果是一个int 类型,这时我们用byte类型的b去接收这个结果,可能会导致精度的损失。
但是我就是想转换,可咋整呢?
那我们就进行强制转换
class TypeConvertTest {
public static void main(String[] args) {
int x = 3;
byte b = 5;
b = (byte)(x + b);
System.out.println(b); // int类型 + byte类型 = int类型
}
}
结果:
8
- 强制类型转换注意事项
如果超出了被赋值的数据类型的取值范围,强转得到的结果可能会由于精度的损失,与我们期望的结果不同 。
class TypeConvertTest {
public static void main(String[] args) {
byte b = (byte)(126 + 4);
System.out.println(b); // int类型 + byte类型 = int类型
}
}
输出:
-126
图解:
126 + 4 = 130
00000000 00000000 00000000 10000010 //130的二进制
如果我们进行强制类型转换,将int转换为byte类型,则前3个8位将被砍掉
10000010 //byte类型
由于我们运算时是用补码进行运算的,所以上面这个是补码,我们需要将其转换为原码
10000010 --反码--> 10000001 --原码--> 11111110
可以看到这个byte类型的数据是-126