3 java casting type-conversion
你好我从我的书中有任务写这段代码
public class EkspKonverzija
{
public static void main(String args[])
{
byte b;
int i=257;
double d= 323.142;
b=(byte) i;
System.out.println("i and b "+i+" "+b);
i=(int) d;
System.out.println("d and i "+d+" "+i);
b=(byte) d;
System.out.println("b and d "+b+" "+d);
}
}
Run Code Online (Sandbox Code Playgroud)
结果是:
我和b 257 1
d和i 323.142 323
d和b 323.142 67
我理解为什么第一次转换的结果是1,我也理解第二次转换,但我不知道为什么结果67在最后一次转换,我无法弄清楚所以我需要你的帮助.谢谢
所有这些都称为缩小原始转换(第5.1.3节):
对话(byte):
257 = 0000 0001 0000 0001
Run Code Online (Sandbox Code Playgroud)
截断高字节给出:
(byte) 257 = xxxx xxxx 0000 0001
Run Code Online (Sandbox Code Playgroud)
这显然是1.
从浮点到整数的对话总是从零到零.
从对话double到byte发生在两个步骤:
在double被铸造成int,继向零规则.
(int) 323.142 ~~~> 323
Run Code Online (Sandbox Code Playgroud)在int被截断一个字节.
(byte) 323 ~~~~> 67
323 = 0000 0001 0100 0011
(byte) 323 = xxxx xxxx 0100 0011
= 67
Run Code Online (Sandbox Code Playgroud)