目录
整型之间的转换总结:
整型的值范围
整型的隐式转换
整型之间的转换
char类型转换为byte、short时,必须使用显式类型转换
当byte,char或者short类型(或为三者的混合)参与运算时,结果为int类型,而并非与较高的类型相同
byte转char比较特殊,先将byte扩展到int,然后再收缩到char,即扩展收缩转换
整型之间的转换总结:
如果变量的类型是byte、short或char类型,当对其赋予编译时期的常量,而该常量又没有超过变量的取值范围时,编译器就可以进行隐式的收缩转换。这种隐式的收缩转换是安全的,因为该收缩转换只适用于变量的赋值,而不适用于方法调用语句,即不适用于方法调用时的参数传递。
注意char类型,是一个无符号类型。因此,char与short,char与byte之间的转换都必须显式地使用类型转换。
从byte到char的转换为扩展收缩转换,该转换比较特殊,即先将byte扩展转换到int,然后再收缩转换到char。
在整型数据间的扩展转换中,如果操作数是char类型(无符号类型),则进行无符号扩展,扩展位为0;如果操作数是byte、short或int(有符号类型),则进行有符号扩展,扩展位为该变量的符号位。
整型数据之间的收缩转换,仅仅是截断并丢弃高位,不做任何其他处理。
整型的值范围
byte:8位(一个字节8位),值范围:-2⁷~ 2⁷, 即 -128 ~ 127
char:16位,无符号类型,能表示的数值范围为:0 ~ (2¹⁶-1) ,即 0 ~ 65535
//加入Java开发交流君样:756584822一起吹水聊天
// char类型的最小值,Unicode的'\u0000'表示的是空字符,十进制数字表示的是0
public static final char MIN_VALUE = '\u0000';
// char类型的最大值,Unicode的'\uFFFF'转换为十进制数字时,直接进行无符号位扩展到32位,即表示的数值为65535
public static final char MAX_VALUE = '\uFFFF';
short:16位,值范围:-2¹⁵ ~ (2¹⁵-1),即 -32768 ~ 32767
int:32位,值范围:-2³¹ ~ (2³¹-1),即 -2147483648 ~ 2147483647
long:64位,值范围:-2⁶³ ~ (2⁶³-1),即 -9223372036854775808 ~ 9223372036854775807
整型的隐式转换
编译时的整型字面常量(int类型),如果将其赋值给比 int 类型低的变量类型(byte、short或char),而整型字面常量的值没有超过该变量类型的取值范围,那么编译器就可以做隐式类型转换。
byte b = 1; // 隐式类型转换,byte值范围为:-128 ~ 127,1在此范围内
char c = 1; // 隐式类型转换,char能表示的数值范围为:0 ~ 65535,1在此范围内
short s = 1; // 隐式类型转换,short值范围为:-32768 ~ 32767,1在此范围内
byte b1 = 128; // 编译错误,128超过了byte值范围,产生编译错误
int i = 1;
以下产生编译错误,i不是整型字面常量,不能做隐式转换,必须显式强转
//加入Java开发交流君样:756584822一起吹水聊天
byte b2 = i; // 编译错误,必须显式强转:byte b2 = (byte) i;
char c2 = i; // 编译错误,必须显式强转:char c2 = (char) i;
short s2 = i; // 编译错误,必须显式强转:short s2 = (short) i;
隐式转换的条件总结:
整型字面常量
整型字面常量的值没有超过要转类型的取值范围
只适用对变量赋值,不适用于方法调用语句
整型之间的转换
- char类型转换为byte、short时,必须使用显式类型转换
char类型是无符号类型,值范围是:0 ~ 65535,与byte(-128 ~ 127),short(-32768 ~ 32767)类型不存在子集关系,因此char类型与其他两种类型之间的转换必须使用显式类型转换。
char c = 'a';
byte b = (byte) c;
short s = (short) c;
- 当byte,char或者short类型(或为三者的混合)参与运算时,结果为int类型,而并非与较高的类型相同
byte b = 100;
char c = 50;
short s = 200;
int t1 = b + c; // byte类型 + char类型,结果为int类型
int t2 = b + s; // byte类型 + short类型,结果为int类型
int t3 = c + s; // char类型 + short类型,结果为int类型
//加入Java开发交流君样:756584822一起吹水聊天
- byte转char比较特殊,先将byte扩展到int,然后再收缩到char,即扩展收缩转换
<1> 扩展转换:
在整型数据间的扩展转换中,如果操作数是char类型(无符号类型),则进行无符号扩展,扩展位为0
如果操作数是byte、short或int(有符号类型),则进行有符号扩展,扩展位为该变量的符号位。
<2> 收缩转换:
整型数据之间的收缩转换,仅仅是截断并丢弃高位,不做任何其他处理。
生命不止坚毅鱼奋斗,有梦想才是有意义的追求
给大家推荐一个免费的学习交流群:
最后,祝大家早日学有所成,拿到满意offer,快速升职加薪,走上人生巅峰。