Java | 自动类型转换和强制类型转换

在 Java 中,不同的数值类型能够表示的数值范围不相同,不同的数值类型经常需要互相转换,有自动转换和强制转换两种方式。

数值类型的表示范围可以理解为盛放液体的容器,容量小的容器可以随意将液体倒入大容量容器。反过来则不行,多余的液体会溢出。

强制类型转换

“强制类型转换”

强制类型转换分为两种情形,比如 byte(233)byte(300) 两者的计算略有差别。

自动类型转换和强制类型转换

自动类型转换和强制类型转换

233 是 4 字节 32 位的 int 型,二进制表示为 00000000 00000000 0000000 11101001,byte 型是 1 字节 8 位,属于强制类型转换。强制转换的过程中,Java 直接将前 24 位截断,只保留后面 8 位 11101001

11101001 最左一位是 1,表示是负数,而负数是以补码的形式存在的,因此还需要换算成原码。最左一位固定不动,其他 7 位取反,即 10010111,换算成十进制即为 -23。

300 是 4 字节 32 位的 int 型,二进制表示为 00000000 00000000 00000001 00101100,转 byte 属于强制类型转换。Java 将前 24 位截断,只保留后面 8 位 00101100

最左一位是 0,表示是正数,故不需要反码——>原码的过程,换算成十进制即为 44。

程序运行结果

程序运行结果

1
2
3
4
5
6
7
8
9
10
11
12
public class test
{
/*自动类型转换和强制类型转换*/
public static void main(String[] args)
{
byte i = (byte)233;
System.out.println("(byte)233 result is: " + i);
byte j = (byte)300;
System.out.println("(byte)300 result is: " + j);
}
}
觉得还不错?帮我赞助点域名费吧:)