连续多次演员不按预期工作

时间:2015-12-28 04:49:49

标签: java

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

我在Joshua Bloch和Neal Gafter的书“Java Puzzlers:陷阱,陷阱和角落案例”中找到了以下程序

该程序连续使用三个演员阵容:

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

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

2 个答案:

答案 0 :(得分:2)

表达式:function get_list (value) { return [ first_transform(value), second_transform(value) ] } get_list(12)

  1. (int) (char) (byte) -1的类型为int
  2. -1是一个值为-1的字节
  3. (byte) -1首先将值为-1的字节再次符号扩展为值为-1的32位整数。这意味着所有32位都设置为1(32位的-1的双补码编码)。然后它被转换为(char) (byte) -1类型,这是一个无符号的16位值,因此你将16位设置为1,其值为65535。
  4. char通过将其再次显式地转换为32位整数,确保将其打印为数字而不是代码点65535的字符。

答案 1 :(得分:1)

java中的char是无符号的16位整数。如果将一个负整数文字(如-1)转换为char,则该值将被解释为正数;在这种情况下65535-或Unicode字符\ uFFBF。

仅使用char检查此-1强制转换,

System.out.println( (char) -1);

如果它使用intbyte类型投放,则仅返回-1