自动类型转换
Java支持自动类型转换的类型如下所示,左边的数值类型可以自动类型转换成箭头右边的数值类型。
1),byte->short->int->long->float->double
2),char->int->long->float->double
{
// 下面3行代码int类型自动转换成float类型
int a = 6;
long b = a;
System.out.println(b);
}
如果希望把基本类型的值转换为对应的字符串时,可以把基本类型的值和一个空字符串进行连接。
{
// 一个基本类型的值和字符串进行连接运算,基本类型的值自动转换成字符串
int a = 6;
System.out.println(a + "");
// 下面的语句输出7LinkinPark
System.out.println(3 + 4 + "LinkinPark");
// 下面的语句输出LinkinPark34
System.out.println("LinkinPark" + 3 + 4);
}
强制类型转换
如果希望上面自动转换中,箭头右边的类型转换成左边的类型,则必须进行强制类型转换。
强制类型转换的语法格式:(targetType)value,强制类型转换的运算符是圆括号(())。
当进行强制类型转换时,类似于把一个大瓶子里面的水倒入一个小瓶子,如果大瓶子里面的水不多还好,如果大瓶子里面的水很多
,将会引起溢出,从而造成数据丢失。
这种类型也称为缩小转换。
{
// 下面3行代码输出-23,典型的溢出
int intValue = 233;
byte byteValue = (byte) intValue;
System.out.println(byteValue);
// 下面3行代码输出3,典型的信息丢失
double doubleValue = 3.14;
int iValue = (int) doubleValue;
System.out.println(iValue);
}
表达式类型的自动提升
{
// 下面2行代码出错,shortValue类型参与运算,类型自动提升到int
// 将一个int类型的值赋给一个short类型的值,编译不过
short shortValue = 5;
shortValue = shortValue - 2;
// 下面4行代码正确,3个不同类型的值参与运算,类型提升到最高的类型
// double,int,byte中,double类型最高,所以结果double类型
byte byteValue = 4;
int intValue = 1;
double doubleValue = 2.33;
double result = byteValue + intValue + doubleValue;
System.out.println(byteValue + intValue + doubleValue);
// 下面代码的类型同样为double
System.out.println(doubleValue / intValue);
}