基础知识巩固:理解java数据类型转换规律
前言
数据类型为什么需要转换呢?
- 为了节省空间
- 如
int a = 20,可转换为byte类型byte b = (byte)a;因为byte范围为-128 到 127,存储该值已足够,可节省大量空间。
- 如
- 为了方便换算
- 如前台接受数字内容的字符串,为了方便后台运算,可将字符串转换成对应的数字类型数据进行换算。
在java中数据类型转换分为自动类型转换和强制类型转换,以下篇幅将进行详细介绍。
自动类型转换
自动类型转换是从小类型转换到大类型, 这里的大小指的是存储空间的大小,也可理解为精度大小(即精度低的转换到精度高的)
- 在Java中,boolean类型与所有其他7种类型都不能进行转换。
- 在其他7种基本类型中,byte和char ,char和short之间不能自动转换
- byte
-2^15 ~ 2^15-1有负数范围,而char0 ~ 2^16-1只有正数范围 - char的正数最大范围大于short的正数最大范围
- byte
这直接导致byte类型不能自动类型提升到char,char和short也不会发生自动类型提升(因为值范围问题) 。所以,char 不能和byte short 相互自动转换

- 如果2个操作数(包括byte,short,char,int),都将会转换为int类型,并且结果也是int
short s = 10;
int num = 20;
//必须是int或者比int精度更高的类型接受
int n = num + s;
byte b=3;
//必须声明byte,因为b*3的结果为int类型
b=(byte)(b*3);
- char类型向更高类型(如整型)转换时,会转换为对应的ASCII码值,再做其他类型的自动转换
char c = 'A';
int num = 10;
int a = c+num;
- 编译器只看类型不看值大小
int a = 129;
//编译器只看类型不看值
byte b = (byte)a;
//结果为-127
System.out.println(b);
强制类型转换
强制类型转换语法:
数据类型 变量名 = (数据类型)值; 注:值可能是更高的类型
int b = 20;
byte a = (byte)b;
强制类型转换的注意事项:
- 高转低会导致精度丢失,不同类型的强制转换,可能会导致精度的下降
- 强转使用场景:一般是开发中我们知道该值的范围,强制转换不会造成精度损失的情况下使用
强制转换示例:
示例1
short i=99;
char c=(char)i;
示例2
int i1=123;
int i2=456;
//小数类型默认double,表达式结果取最高精度double,所以double(高)转float(低)需要强转
float f1 = (float) ((i1+i2)*1.2);
示例3
byte b1=1;
byte b2=2;
//byte,short,char在计算时首先转换为int类型,b1+b2结果为int类型,需强转
byte b3=(byte)(b1+b2);
结论
在Java中,boolean类型与所有其他7种类型都不能进行转换
自动类型转换
- 低精度转高精度(小类型转大类型)可自动类型转换
- byte和char ,char和short之间不能自动转换
- byte、char、short类型运算时会先自动提升为int类型,表达式结果也为int类型
- 表达式结果默认取精度最大的类型,接收类型必须大于等于该精度
强制类型转换
- 使用场景:一般是开发中我们知道该值的范围,强制转换不会造成精度损失的情况下使用