缩小从byte到char的转换Java

时间:2016-09-14 23:30:26

标签: java

我读到虽然类型字节占用8位内存,而类型char占用16位内存,但从字节到字符的转换被认为是缩小的,因为字节是有符号的,而char是无符号的。我认为这意味着当我们将带有负值的类型字节转换为char时,我们会丢失负数,因此我们会丢失信息,因此转换正在缩小。

我试图在Java程序中测试它。

public class Test
{
  public static void main (String[] args)
  {
    byte num = -1;
    char test = (char)num;
    System.out.println(test);
  }
}

我预计打印测试会输出:

1

这将是-1而没有负号,因为char是无符号的。这实际上是输出:

?

我的程序或我将字节转换为char的想法是否有问题?

1 个答案:

答案 0 :(得分:0)

这不是标志或char如何运作。

  1. 请记住,System.out.println会显示char UTF-8字符(与前8位值的ascii相同)。因此System.out.println((char)71);将打印“G”。因此,当您希望打印“1”时,您所说的是您期望(char)-1 == 41。如果您想要数字值,则应在打印前将其强制转换为int
  2. System.out.printlnsubstitute a question mark代表不可打印的字符。
  3. bytechar首先转换为intdoc(由Sotirios Delimanolis联系)说;
  4.   

    首先,通过扩展原语转换(第5.1.2节)将字节转换为int,然后通过缩小基元转换(第5.1.3节)将结果int转换为char。

    其中

      

    有符号整数到整数类型T的缩小转换只会丢弃除n个最低位之外的所有位,其中n是用于表示类型T的位数