0
点赞
收藏
分享

微信扫一扫

第三次学JAVA再学不好就吃翔(part5)--基础语法之数据类型转换

学习笔记,仅供参考


文章目录

  • ​​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

举报

相关推荐

0 条评论