Java-(Char)-1向int输出的解释?

时间:2018-08-19 17:49:56

标签: java casting

我需要知道程序下面的输出是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放在那里时发生了什么。有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

Java char是未签名的。 (奇怪的是,它是Java中的一个无符号原语。)

byte转换为charJLS 5.1.4中描述的一种特殊情况。

  1. byte转换为int(加宽):从(byte) -1(int) -1
  2. int转换为char(变窄):如描述的那样,从(int) -1(char) 65535
  

有符号整数到整数类型T的缩小转换会简单地丢弃除n个最低阶位以外的所有位,其中n是用于表示类型T的位的数量。除了可能丢失有关T的大小的信息外,数字值,这可能导致结果值的符号与输入值的符号不同。 (JLS 5.1.3

因此(int) -1的16个最低位(全1)被重新解释为char的{​​{1}}(无符号)结果。