zoukankan      html  css  js  c++  java
  • 运算中的一些小细节和原理分析

    下面两种情况的原因:我们在赋值时,都是将 int 类型的常量赋给 byte 类型的变量,在这个过程中,编译器会进行判断,如果赋的值在 byte 类型值域内,就可以被赋值,反之依然会报错。

    情况一:3+4 是两个常量相加,结果依然是常量,赋值时就会进行相应的判断,能赋值就赋值,不能赋值就不赋值,3+4=7,可以被赋值,所以不报错。

    情况二:a/b/c 这三个都是变量,既然是变量,那就证明值是可变的,也就是说变量a加上变量b的值有可能超出 byte 的值域,所以编译报错,需要手动强转。

    情况一:
    byte a = 3;
    a = 3 + 4;//不报错
    情况二:
    byte a = 3;
    byte b = 4;
    byte c = a + b;//会报错

    为什么 a+=2 不报错,a=a+2 会报错呢?

    就像上面说的,a 是变量,那么做运算时就有超出值域的可能性,a+=2 之所以不报错是因为在编译时,系统会自动帮我们进行强转,而 a=a+2 并不会,需要手动强转,这就是 a+=2 和 a=a+2 的一点区别。

    为什么int类型的变量b并没有出现报错的情况呢?

    是因为默认的int和double类型,即使超出值域了,也不会报错,而是直接将多余的部分砍掉,取剩下的值。

    short a = 3;
    a += 2;//编译不报错
    a = a + 2;//编译报错
    int b = 3;
    b += 2;//不报错
    b = b + 2;//不报错

    下面 a=a++; 运算过后,a 的值还是 7,而不是 8,是因为:

    a=a++ 整个运算过程如下:( b=a++ 运算过程一样,先算 ++ 再赋值)

                 先定义一个临时变量将 a 的值存起来

                通过临时变量的值进行 ++ 运算,将运算结果赋值给 a

                然后再将临时变量的值再赋给变量 a,这样之前的运算结果就会被覆盖掉,所以 a 的值依然是 7

    int a = 5;
    a++;//a的值为6
    int b = a++;//b的值为6,a的值为7
    a = a++;//a的值为7

  • 相关阅读:
    接口测试
    Face Anti-Spoofing人脸活体检测-双目红外活体检测
    Spring面试题目
    1.多线程说在前面的话
    2.三分钟入门多线程
    卷积计算
    springmvc 后台向页面EasyUI的tree传递数据(JSon格式)
    springmvc 后台向页面EasyUI的Datagrid传递数据(JSon格式)
    分页工具 Pagehelper的学习 (Spring+Mybatis)
    一些免费的WebService的服务网站(转发)
  • 原文地址:https://www.cnblogs.com/xiaoyulong/p/8278947.html
Copyright © 2011-2022 走看看