类型转换有两种基本方式。把某种类型的值转换为取值范围更广的类型,此时执行的是放大转换(widening conversion)。放大转换是隐式类型转换,也叫作自动类型转换, 由系统自动完成.是从存储范围小的类型转到存储范围大的类型。
另一种方式是缩小转换(narrowing conversion)。把一个值转换为取值范围小的类型执行的是缩小转换。缩小转换是显示类型转换也叫作强制类型转换,此时可能会丢失精度。
这里要注意的是,byte可以隐式类型转换到short类型,但是需要强制类型转换到char类型。同时,short和char类型之间的类型转换也需要强制类型转换。
byte bt = 1;
char ch = 5;
short sh = 5;
ch = (char) bt;//byte转char需要强制转换
sh = bt; //byte 转short是隐式转换
sh = (short) ch;//short 与 char 之间转换也是强制转换
ch = (char) sh;
我们知道char和short类型都占两个字节,为什么会出现这种情况呢?实际上虽然都是占两字节,但是表示的范围却不一样。
byte表示的范围是-2ˆ7~2ˆ7-1;
char表示的范围是0~2ˆ16-1;
short表示的范围是-2ˆ15~2ˆ15-1;
通过这几个范围我们就可以明白为什么byte转short是隐式转换,转char就要是显式转换。因为byte的表示范围在short表示范围内,但不再char的表示范围内。
char和short表示的范围不同,所以它们之间需要强制转换。
No comments:
Post a Comment