讲类型转换之前,让我来贴张表
基本数据类型的表示范围
类型 | 长度 | 表示范围 | 默认值 |
byte | 8b | -128~+127 | 0 |
short | 16b | -32768~+32767 | 0 |
int | 32b | -21147483648~+2147483647 | 0 |
long | 64b | -9223372036 854 775 808~+9223372036 854775807 | 0L |
float | 32b | -3.4E38~+3. 4E38 | 0.0f |
double | 64b | -1.7E308~+1.7E308 | 0.0d |
char | 16b | '\ u0000'~'\uffff' | '\u0000' |
一、自动类型转换
1、boolean类型不能进行类型的转换,既不能进行自动类型的提升,也不能强制类型转换。 否则编译出错。
2、Java基本类型的转换
如图,只要顺着箭头可以走到,就可以转换,但不可以逆着箭头。
即
byte型可以转换为short、int、、long、float和double;
short可转换为int、long、float和double;
char可转换为int、long、float和double;
int可转换为long、float和double;
long可转换为float和double;
float可转换为double;
那么仔细看开头的表的同学要问了,long类型64bit,float类型32bit,long怎么能转换成float呢?
答:在仔细看表会发现,float表示的数据范围比long大得多。
你们又有同学要问了,为什么32bit比64bit表示的范围大呢?
答;这里就涉及到计算机组成原理中的浮点数在内存中的存储问题了。(不想看可以不看)
数字在计算机中都是用二进制表示的,有符号位。,
按IEEE754浮点数标准:浮点数由数符S、指数E、尾数M组成,
单精度格式(32位):数符1位,E=8位,M=23位
看道没有E=8,最大时01111111,即127,
是10^38次方,long最大才19位,
当然是float表示范围大喽。
3、基本类型转换为字符串
把任何基本类型的值和字符串进行运算时,基本类型的值将自动转换成为字符串类型,即使字符串类型不是基本类型,而是引用类型。因此,如果想将基本类型的值转换为对应的字符串,可以把基本类型的值和一个空字符串进行连接。
二、强制类型转换
把范围小的转换为范围大的,精度高的转换为精度低的,因为会损失精度,所以要强制转换,
语法格式:(目的类型)表达式;
例如:int i = (int)9.9f;