zoukankan      html  css  js  c++  java
  • 类型运算细节

    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次运算      损失精度  无法判断    所以不进行自动转换动作,                  

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

  • 相关阅读:
    波形相加
    2003-2011电赛题目
    个人课程总结
    程序员的修炼之道:从小工到专家阅读笔记03
    程序员修炼之道:从小工到专家阅读笔记02
    计算最长英语单词链
    学习进度十五
    程序员修炼之道:从小工到专家阅读笔记01
    学习进度十四
    用户体验评价
  • 原文地址:https://www.cnblogs.com/weilin/p/5299341.html
Copyright © 2011-2022 走看看