Java007-类型转换
一、自动类型转换
小范围类型的变量直接赋值给大范围类型的变量
范围大小:
1)byte < short < int < long < float < double,如
short sh = 20;
double d = sh;
2)char < int < long < float < double,如
char ch = 'a';
long l = ch;
二、表达式中自动类型转换
在表达式中,小范围类型的变量会自动转换成当前最大范围的类型,再运算。
范围大小:byte、short、char < int < float < double
byte by = 1;
float f = 2.1f;
// byte re = by + f; //报错,改为int类型试试
// int re = by + f; //报错,改为float类型则不报错
float re = by + f; //不报错
注意:在表达式中,byte、short、char是直接转换成int类型运算,即没有比它们大范围的类型时结果类型为int。
//例1:仅含byte、short、char
byte b = 1;
short sh = 3;
char ch = 'A';
// byte rs = b + ch + sh; //报错,改为char类型试试
// char rs = b + ch + sh; //报错,改为short类型试试
// short rs = b + ch + sh; //报错,改为int类型则不报错
int rs = b + ch + sh; //不报错
System.out.println(rs);
//例2:仅含short
short s1 = 3;
short s2 = 3;
// short s3 = s1 + s2; //报错,改为int类型则不报错
int s3 = s1 + s2; //不报错
System.out.println(s3);
因此,除仅含byte、short、char外,表达式的最终结果类型由表达式最高类型决定。
三、强制类型转换
强制类型转换是指强行将大范围类型的变量或数据赋值给小范围类型的变量。
强制类型转换导致的问题有:
1)可能出现数据丢失。
2)小数强制转换成整数是直接不要小数,只保留整数。
// 1)可能出现数据丢失
byte b = (byte)129;
System.out.println(b);//结果为 -127
// 2)小数强制转换成整数是直接不要小数,只保留整数
int i = (int)3.98;
System.out.println(i);//结果为 3