[18/11/15] 数据类型转换

一、自动转换

    自动类型转换指的是容量小的数据类型可以自动转换为容量大的数据类型。如图所示,红色的实线表示无数据丢失的自动类型转换,而虚线表示在转换时可能会有精度的损失。

  

   【例外】 也可以将整型常量int 直接赋值(定义时用)给byte、 short、 char等类型变量,而不需要进行强制类型转换,只要不超出其表示的范围即可。

如       short  b = 12;    //合法

      short  b = 1234567;//非法,1234567超出了short的表数范围
 
二、强制转换
      后果:有可能丢失信息;精度降低或溢出。
如: double x=3.14;
        int n=(int)x;  //n输出为3,只保留了整数部分,舍去小数,丧失精度
 
三、溢出问题
 
 1 public class Test_1115_03
 2   
 3 {
 4     public static void main(String[] args) 
 5     {
 6         int money = 1000000000; //10亿
 7         int years = 20;
 8         int total = money*years; //返回的total是负数,超过了int(正负21亿)的范围
 9         System.out.println("total="+total);
10         long total1 = money*years;  //返回的total仍然是负数。默认是int,因此结果会转成int值,再转成long。但是已经发生了数据丢失
11         System.out.println("total1="+total1);
12         long total2 = money*((long)years); //返回的total2正确:先将一个因子变成long,整个表达式发生提升。全部用long来计算。
13         System.out.println("total2="+total2);
14     }
15 }

【注意】

L和l 的问题:  不要命名名字为l的变量,l容易和1混淆。long类型使用大写L不要用小写

 
 
posted @ 2018-11-15 23:39  ID长安忆  阅读(146)  评论(0)    收藏  举报