二、java 类型转换
1、容量大小排序
要进行类型转换,首先要知道每种类型容量的大小排序,因为在类型转换的过程中可能出现内存溢出和精度丢失等问题
类型 | byte | short | char | int | long | float | double |
---|---|---|---|---|---|---|---|
容量 | -128~127 | -32768~32767 | \u0000~\uffff | -231~231-1 | -263~263-1 | 浮点数 | 浮点数(范围大) |
优先级从小到大依次为(浮点数的优先级永远大于整数):
byte,short,char–>int–>long–>float–>double
运算中,不同类型先转换为同一类型,然后进行运算
2、类型转换
(1)自动转换
当优先级从高到低时,会自动转换,不需要额外操作
(2)强制转换
当优先级从低到高时,需要强制转换,转换格式为
(类型)变量名
(3)注意事项
1、不能对布尔制进行转换
2、不能把对象类型转换为不相干的类型
3、再把高容量转换到低容量的时候,强制转换
4、转换的时候可能出现内存溢出、或者精度问题!
具体操作如下
/*
注意点;
1、不能对布尔制进行转换
2、不能把对象类型转换为不相干的类型
3、再把高容量转换到低容量的时候,强制转换
4、转换的时候可能出现内存溢出、或者精度问题!
*/
public class Demo04 {
public static void main(String[] args){
int i = 128;
byte b = (byte)i;//内存溢出
//强制转换 (类型)变量名 高到低强制转换
double h = i; //自动转换 低到高自动转换
System.out.println(i);
System.out.println(b);
System.out.println(h);
System.out.println("==============================");
System.out.println((int)23.7);
System.out.println((int)-45.89f);//精度丢失
System.out.println("==============================");
char c = 'a';
int d = c+1;
System.out.println(d);
System.out.println((char)d);
}
}
输出结果为
3、溢出问题
操作比较大的数时需要注意溢出问题
操作如下
public class Demo05 {
public static void main(String[] args) {
//操作比较大的数时注意溢出问题
int money = 10_0000_0000;
int years = 20;
int total = money*years;//默认是int在转换之前已经存在问题了,所以强制转换无法解决
System.out.println(total);//结果为-1474836480计算的时候溢出了
System.out.println((long)total);//结果仍不正确
long total2 = money*(long)years;//先把一个系数转换
System.out.println(total2);//这时可以成功输出答案
}
}
输出结果