多重转型

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;

 

posted on 2015-03-27 08:54  琼华  阅读(101)  评论(0编辑  收藏  举报

导航