您好我的书中有任务写这段代码
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);
}
}
结果是:
i和b 257 1
d和i 323.142 323
d和b 323.142 67
我理解为什么第一次转换的结果是1,我也理解第二次转换,但我不知道为什么结果67在最后一次转换,我无法弄清楚所以我需要你的帮助。感谢
答案 0 :(得分:5)
所有这些都称为Narrowing Primitive Conversion (§5.1.3):
与(byte)
的对话:
257 = 0000 0001 0000 0001
截断高字节给出:
(byte) 257 = xxxx xxxx 0000 0001
显然是1。
从浮点到整数的对话始终舍入为零。
从double
到byte
的对话分两步进行:
double
在舍入为零规则之后被投放到int
。
(int) 323.142 ~~~> 323
int
被截断为一个字节。
(byte) 323 ~~~~> 67
323 = 0000 0001 0100 0011
(byte) 323 = xxxx xxxx 0100 0011
= 67