数据类型转换指的是不同类型数据之间在赋值、运算时的转换,保证数据的一致性,可分为隐式类型转换和显式类型转换,除boolean型外,其他七种基本数据类型都可以进行转换。
隐式类型转换
隐式类型转换也就是自动类型转换,不需要对代码进行处理,可在赋值或运算时实现自动转换。
转换原则:从数据范围小的到数据范围大的进行转换。
byte–>short–>int–>long–>float–>double
char–>int(char只能和int相互转换)
下面看一下程序运行举例:
public class datatype {
public static void main(String[] args) {
long num1 = 100L;//声明long类型变量 按照命名规则需要添加L
long num2 = 100;//默认100的数据类型是int
System.out.println(num1);
System.out.println(num2);
long a = 100;//声明long类型变量 a 其中发生了int-->long自动转换
float b = a ;//声明float类型变量 b
System.out.println(b);
}
}
可以看到num1、num2、a、b都能编译运行并且无报错,而在num2的声明中,左边是long类型 右边的数据类型是int类型
从 int --> long 符合数据范围从小到大的要求 因此发生了自动类型转换,变量b的数据类型是float 而声明a的变量是long
其中float类型的数据范围是大于long类型的数据范围的,因此这里也发生了自动类型转换。
另外,在自动类型转换中也存在一个特例,把int类型的数据赋值byte,short、char类型也是可以的,只要不超过这三种数据类型的范围即可。
显示类型转换
显示类型转换也称为强制类型转换,需要对代码进行一定的处理。
转换的格式 : 数据类型 数据名称 =(数据类型)需要进行转换的数据值,下面是简单的程序举例:
public class datatype2 {
public static void main(String[] args) {
long a = 100L;//声明long类型变量 a
int b = (int) a;//将a强制转换赋值给int类型变量b
System.out.println(b);
}
}
可以看到我先声明了一个long类型变量a,然后将他强制转换赋值给b,这里如果不进行强制转换就会报错,其他类型的强制转换也如例子中进行即可。
补充:
- 强制转换一般不推荐使用,在一些情况下会造成精度损失,如long类型的值超出int类型的最大范围时,这个值最大只能是int类型的最大值。
- 在使用byte、short、char,进行数学运算时,会转换成数字。
- 在byte、short、char类型进行运算时,会首先提升到int类型在进行计算,因此在此过程中需要进行一定的强制转换。
参考例子:
public class datatype2 {
public static void main(String[] args) {
char b = 'A';
System.out.println(b+1);//输出结果为66
byte num1 = 40;
byte num2 = 60;
int result = num1 + num2;//结果赋值需为int,如果要使用byte需要进行强制转换
byte result2 = (byte) (num1+num2); //结果赋值为byte 需进行强制转换
System.out.println(result);
System.out.println(result2);
}
}
结果如图: