连续多次转换未按预期工作[重复]

2023-11-29

根据我的理解,强制转换用于将值从一种类型转换为另一种类型。

我在 Joshua Bloch 和 Neal Gafter 所著的《Java Puzzlers: Traps, Pitfalls, and Corner Cases》一书中找到了以下程序

该程序连续使用了三个强制转换:

public class Multicast {  
    public static void main(String[] args) {  
      System.out.println((int) (char) (byte) -1);  
  }  
}

我以为它会打印-1,但它正在打印它打印65535,但为什么呢?


表达:(int) (char) (byte) -1

  1. -1是 int 类型
  2. (byte) -1是一个值为 -1 的字节
  3. (char) (byte) -1首先,值为 -1 的字节再次符号扩展为值为 -1 的 32 位整数。这意味着所有32位都设置为1(32位中-1的二补码编码)。然后将其转换为类型char这是一个无符号 16 位值,因此您将 16 位设置为 1,其值为 65535。
  4. (int) (char) (byte) -1通过再次将其显式转换为 32 位整数,您可以确保将其打印为数字而不是代码点 65535 的字符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

连续多次转换未按预期工作[重复] 的相关文章

随机推荐