在编写Java代码的过程中,有时会不可避免的需要转换变量的类型,下面我们来看看Java中类型转换的用法:
一,自动类型转换
变量间的自动类型转换
自动类型转换可以将类型范围小的变量直接赋值给类型范围大的变量,比如可以直接将byte类型的变量赋值给int类型的变量:
byte a = 2;
int b = a;
上面这段代码就直接将byte类型的变量a直接赋值给了int类型的变量b。
变量的类型范围具体是这样:
byte<short<int<long<float<double
类型范围小的变量可以直接赋值给任意类型范围大的变量,比如short类型的变量可以赋值给int类型,long类型,float类型或double类型的变量。
特殊的,字符型char类型的变量与short属于同一级,可以直接赋值给比short类型范围大的任意变量(int类型,long类型,float类型或double类型)。
表达式中的自动类型转换
在表达式中,小范围类型的变量,会自动转换成表达式中较大范围的类型再参与计算。
表达式中的类型范围:
byte,short,char<int<long<float<double
并且:表达式最终结果类型由表达式中的最高类型决定。
举个例子:
byte a = 3;
short b = 8;
long c = 3;
long d = a + b + c;
byte类型的a,short类型的b和long类型的c在表达式long d = a + b + c;中都是先转换为较大范围的long类型,再参与表达式运算的,并且最终结果的类型为也为long,能够被long类型的d接收。
再举个例子:
byte a = 3;
short b = 8;
double c = a + b + 2.7;
byte类型的a,,short类型的b和double类型的2.7在相加时都先转换成了double类型,再参与表达式运算,所以能够被double类型的变量c接收。
特殊的,在表达式中byte,short,char会直接转换为int类型参与运算。
自动类型转换的本质
数据在计算机中以二进制形式存储的,而自动类型转换的本质就是在这些二进制数的高位补零,使表示的范围变大。
二,强制类型转换
强制类型转换就是把类型范围大的变量赋值给类型范围小的变量,并需要在赋值时声明范围小的变量的类型,比如把int类型的变量a声明后赋值给byte类型变量b。
int a=3;
byte b=(byte)a;
一般的强制类型转换格式为:
数据类型 变量=(数据类型)原变量/数据
特殊的,浮点数转换为整数时是只保留整数部分而直接去掉小数部分。
强制类型转换的本质
强制类型转换的本质与自动类型转换相似,强制类型转换的本质是去掉二进制数的高位,保留强转后该数据类型能表示的范围。
特殊的,由于高位可能不全为0,所以强转可能导致出现数据丢失,强转前后表示数字不同的情况发生。