码迷,mamicode.com
首页 > 其他好文 > 详细

类型运算细节

时间:2016-03-20 21:23:05      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

 

 

 

public static void main(String[] args)

{

    byte b = 4;

    b = 3+7 ;   这个代码在编译时不会报错

    byte a = 4;

    byte c = 5;

    b =a+c;     这个代码在编译时会报错

  System.out.println(b);

}

 

原因分析 :

 

 在程序中只要见到整数默认都是int类型的

byte   b=4;   4int类型  编译器在运行的时候判断4这个字节是不是在byte的范围内

如果在范围内,就把4做了一次默认的强转  ,把最后把4的有效字节赋值到了b这个变量当中                  

所以底层会做这个自动转换过程  ,编译器会做检查并做自动转换    

 byte  b -128~127  

4只需要用一个字节来表示,其他都为判断在byte的范围之内    

 就把4的值赋给b

 b1b2都是变量  数值会发生变化,值不确定(b1,b2具体的值不确定,不清楚) 编译器不能做出检查,检查不了

 

 

eg :

 byte b  = 3+7 ; 

右边是常量,值不会发生变化,编译器可以进行判断是否在byte 范围内 

byte b =5;

byte c =1;

byte a = 1‘

a = b+c ;      右边不确定,是无法进行判断 ,所有编译会报错

 

 

总结就是:判断数据类型能不不能装的下

 

 

 

 

      short s=3;  

        // 先检查,判断在范围,再做转换

 

        s+=4;    

//   1次运算    编译正常      先赋值2边的和,在进行判断,再进行自动转换

//s=(short)(s+4) 在底层做了强制类型转换   是赋值运算的特点

//  在  底层赋值过程当中,做了强制转换动作

 

 

     s=s+4    //   2次运算      损失精度  无法判断    所以不进行自动转换动作,                  

                 // 进行了自动类型的提升,类型已经不能再赋给低值(低空间)类型,因为会发生精度丢失

 

类型运算细节

标签:

原文地址:http://www.cnblogs.com/weilin/p/5299341.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!