import java.util.*; public class Sixth{ public static void main(String[] args){ System.out.println((int)(char)(byte)-1); } }
会输出多少?
-1?
最终为65535
这里面牵涉到了整数类型之间的强制类型转换
byte,short,int之间的转换还是好理解的
主要是跟char的转换,因为char类型没有负数
一条规则(从较窄整数类型到较宽整数类型的符号扩展行为):
如果最初的数值是有符号的,就执行符号扩展;如果它是char,那么不管它将被转换成什么类型,都执行零扩展。
新get到的技能:
1、将char转型为一个宽度更宽的类型,并且不希望有符号扩展
int i = c & 0xffff;//0xffff是int
2、将char转型为一个宽度更宽的整形,且有符号扩展
int i = (short)c
short和char的宽度一样
3、将byte无符号扩展转型为char
char c=(char)(b & 0xff);//0xff是int
4、将byte有符号扩展为char
char c = (char)b;