我需要知道程序下面的输出是65535
public class Demo {
public static void main(String[] args) {
int a=-1,c;
byte b;
char d;
b=(byte)a;
System.out.println(b);
d=(char)b;
System.out.println(d);
c=(int)d;
System.out.println(c);
}
}
输出:
-1
65535
我的理解:如果我对变量a有一个正数,它将给我一个字符或符号(ASCII码),但是我想知道当我将-1放在那里时发生了什么。有人可以帮助我吗?
答案 0 :(得分:1)
Java char
是未签名的。 (奇怪的是,它是Java中的一个无符号原语。)
将byte
转换为char
是JLS 5.1.4中描述的一种特殊情况。
byte
转换为int
(加宽):从(byte) -1
到(int) -1
。int
转换为char
(变窄):如描述的那样,从(int) -1
到(char) 65535
:有符号整数到整数类型T的缩小转换会简单地丢弃除n个最低阶位以外的所有位,其中n是用于表示类型T的位的数量。除了可能丢失有关T的大小的信息外,数字值,这可能导致结果值的符号与输入值的符号不同。 (JLS 5.1.3)
因此(int) -1
的16个最低位(全1)被重新解释为char
的{{1}}(无符号)结果。