java的类型转换和内存溢出说明
强制转换
-
高容量转为低容量时,要使用强制转换,转换过程中可能会导致内存溢出或精度问题(多出现与浮点数转化为整数时),语法规范为(转换类型) 值
容量低——————————>高
byte,short,char,int,long,float,double
内存溢出
int one_num = 128;
byte two_num = (byte) one_num;
System.out.println(two_num);
最终输出结果为-128。
内存溢出原因:byte是八位一字节,所表示十进制数的范围为-128—127
强行转换为导致内存溢出,最终输出为-128
char name = 'a';
int num = name + 1;
System.out.println(num);
System.out.println((char) num);
第一个输出结果为98
第二个输出结果为b
原因:a所表示的十进制数为97,在加1正好为98
98在Unicode编码中表示为b,用char将98强制转换为了b
int num = 10_0000_0000;//JDK7之后可以使用_分割数字
int num2 = 20;
long error_num = num * num2;
System.out.println(error_num);
最后输出为-1474836480,并不是20亿。
原因:两数字在运算时仍然是int类型,运算时内存溢出,导致最后结果不准确
正确做法
int num = 10_0000_0000;
int num2 = 20;
long rihgt_num = (long)num * num2;
System.out.println(rihgt_num);
解析:在运算时将int类型中的10亿转换为long类型,这样可以避免内存溢出
精度缺失
float one_num = 20.7f;
System.out.println((int) one_num);
最终输入结果为20
精度缺失原因:浮点数在转为整数时会省略掉小数部分导致精度缺失
自动转换
-
低容量转化为高容量时会自动转换
byte num = 122;
int num2 = num;
System.out.println(num2);
最终结果为122
注意
布尔值不能随意转换

浙公网安备 33010602011771号