java的类型转换和内存溢出说明

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

 

注意

布尔值不能随意转换

 

posted @ 2021-02-27 20:35  默默努力的路人甲  阅读(74)  评论(0)    收藏  举报