数据转换一般跟类型的所占空间大小有关,八大基本数据类型所占大小:
byte:1个字节
short、char:2个字节
int、float:4个字节
long、double:8个字节
自动转换
是指不需要书写代码,由系统自动完成的类型转换。要求如下:
1、两种数据类型彼此兼容;如数值型与布尔型不兼容则无法转换
2、类型存储范围由小到大:byte→short(char)→int→long→float→double
例1:byte可以自动转换成int类型
byte a = 1;
int b = a;
虚拟机首先将byte类型a转换成int类型,再赋值给b
例2:表达式自动转换
byte a1 = 1;
byte a2 = 2;
byte a3 = a1 + a2;
这样写会报错,在表达式运算期间会自动提升至int类型再做运算,正确写法:
byte a1 = 1;
byte a2 = 2;
int a3 = a1 + a2;
例3:运算符赋值的自动转换
short a = 3;
int i = 5;
s += i;
System.out.println(s);
输出结果为:8
类推:+=、-=、*=、/=、%=都可以自动完成转换
例4:自动转换成字符串
String a = "aaa";
int b = 3;
System.out.println(a + b);
输出结果为:aaa3
手动转换
类型储存范围由大到小
结果会造成精度丢失
例:由short类型转换byte类型
short a = 853; //853二进制为00000011 01010101(short为2字节16位)
byte b = (byte)a; //用(数据类型)添加在属性前边实现强制转换
System.out.println(b);
输出结果为:85 //85二进制为01010101(byte为1字节8位)
由此可以表明:在转换期间16位的short转8位的byte类型,会丢失8位的数据;
其它类型依次类推