由于Java是最强类型语言,所以要进行有些运算的时候,需要用类型转换。运算中,不同类型的数据先转化为同一类型,然后才能进行转换。
低------------------->高(从容量排序)
byte,short,char-->int-->long-->float-->double
拓展:
-
byte占1个字节范围:-128~127(整数类型)
-
2.boolean占一位其值只有true和false两个(boolean类型)
-
short占2个字节范围:-32768~32767(整数类型)
-
char占两个字节(字符类型)
-
int占4个字节范围: -2147483648~2147483647(整数类型)
-
long占8个字节范围:-9223372036854775808~9223372036854775807(整数类型)
-
float占四个字节(浮点类型)
-
double占八个字节(浮点类型)
例如:如下程序(int和type、double,char之间的转化)。
int和type之间的转化
结果:
分析:1. 强制转换的格式:(类型)变量名 (高------>低)。
2. b值出错,内存溢出(byte的字节范围为-128到127)。
正确程序如下:
int和double之间的转化。
分析:1. double基本不会存在内存溢出问题。
2. int-->double 是由低到高,自动转换,故不需要强制转换。
3. double是浮点类型,因此保留小数。
int和char之间的转化。
分析:参考常用字符的ASCLL码表
对操作较大的数时,注意溢出问题。
例如:
分析:int的范围为-2147483648~2147483647(-2^31~2^31-1)300000000超出范围。
分析:long c2 = a *b; a,b默认是int,计算完之后才转换成long类型,转换之前已经存在问题。
正确程序如下:
注意点:
-
不能对布尔值转换。
-
2.不能把对象类型转换为不想干的类型。
-
在把高容量转换到底容量的时候,强制转换。
-
转换的时候可能存在内存溢出,或者精度问题 。(有浮点型参与强制类型转换时,容易引起精度损失。)
例,精度损失。