zoukankan      html  css  js  c++  java
  • Java Grammar(二):运算符

    运算符简介

    计算机自打诞生以来,用作最多的就是进行计算,而计算离不开运算符,所以运算符在我们的Java语言中的地位举足轻重,我们现在就来了解一下Java给我们提供的运算符。

    从运算的元素的个数来区分,可以分为一元运算符,二元运算符,三元运算符。

    其中一元运算符包括:

    • +(正数)
    • -(负数)
    • ++(自增1)
    • —(自减1)
    • ~(按位取反)
    • !(逻辑取反)

    其实自增和自减也可以看成是特殊的二元运算符

    二元运算符包括:

    • 算术运算符:+ ,-,*,/,%
    • 逻辑运算符:&&,||
    • 关系运算符:==,!=,>,<,>=,<=
    • 位运算符:&,|,^,<<,>>,>>>
    • 赋值运算符:=,+=,-=,*=,/=,%=,<<=,>>=,&=,^=
    • instanceof运算符:instanceof

    三元运算符就只有一种: ?:

    7CF6586D-17A7-43B7-BC31-A29EBDD1B23A

    这些运算相信绝大部分已经被在座的各位所熟知,只有极个别的不是很清楚的,下面我所了解的一些面试热点知识来进行讲解。

    一些运算符的小常识

    自增,自减的前后位置

    老生常谈的一个问题,但是还是容易被搞混,自增和自减的顺序前后到底有何不同:

    • 单独使用的时候,两种没有任何区别(温馨提示:面试的时候切记不要忘记第一点哟
    • 表达式中使用的时候,前缀会先进行+1(-1)的运算,而后缀会先运算后进行+1(-1);

    在无视掉第一种情况的下,可以简单记为前缀前,后缀后

    逻辑运算符的短路特性

    我们在使用逻辑运算符&&,||的时候,可以利用逻辑运算符的短路特性减少运算次数,所谓短路特性就是当第一个条件可以判断最终结果的时候,就不会去判断第二个条件

    A && B (当A为false,直接跳过第二个条件的判断,判定为false)
    A || B (当A为true,直接跳过第二个条件的判断,判定为true)
    

    三元运算符

    该运算符的主要是决定哪个值应该赋值给变量。

    		int a , b;
        a = 10;
        // 如果 a 等于 1 成立,则设置 b 为 20,否则为 30
        b = (a == 1) ? 20 : 30;
        System.out.println( "Value of b is : " +  b );
        // 如果 a 等于 10 成立,则设置 b 为 20,否则为 30
        b = (a == 10) ? 20 : 30;
        System.out.println( "Value of b is : " + b );
    

    instanceof

    该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。

    Vehicle a = new Car();
    boolean result =  a instanceof Car;
    System.out.println( result);
    

    位运算符

    位运算符可能在我们日常中使用的并不是很多,算是一个小盲区。但是其实这个运算符还是非常的重要的,我们首先来了解一下运算的机制,与其他运算符不同的是,位运算符是要讲数值转换成二进制后,再进行运算。

    &

    95D04C0D-1F8E-483D-9737-7FA44129BE31

    |

    AD20CC8F-CAFD-4C48-94BD-ABED28D279AE

    ^是按位异或运算符,只有两个对应的运算位不一致的时候,对应计算出的位置为1,否则为0。

    ~是按位取反运算符,将每一位取反(1 -> 0,0 ->1)

    57BB3EC6-07B2-4B57-B9CC-2A3FFA4DFD33

    这里需要注意>>>>>存在一定的区别:

    >> :该数对应的二进制码整体右移,左边的用原有标志位补充,右边超出的部分舍弃。

    >>> :不管正负标志位为0还是1,将该数的二进制码整体右移,左边部分总是以0填充,右边部分舍弃。

    其余操作部分与<<类似,就不再画图演示

    位运算符的运用场景

    • 计算 (m * 2^n) 次方

      2 << 3 = 16;
      2 * (2 * 2 * 2) = 16;
      
    • 判断一个数n的奇偶性

      a & 1 = 0; // 偶数
      a & 1 = 1; // 奇数
      
    • 不用临时变量交换两个数

      a = a^b; 
      b = b^a; 
      a = a^b; 
      
    • x 的 相反数 表示为 (~x+1)

      -x = (~x+1)
      
    • 取绝对值 (a^(a>>31))-(a>>31)

    其余的一些在算法中用到的场景,我这里就不再多少,有兴趣的同学可以去研究一下~

    运算符优先级

    最高优先级的在该表上方,最低优先级的在该表底部

    类别 操作符 关联性
    后缀 ()[].(点操作符) 左到右
    一元 ++ - !~ 右到左
    乘性 * / % 左到右
    加性 + - 左到右
    移位 >> >>> << 左到右
    关系 > >= = < <= 左到右
    相等 == ~= 左到右
    按位与 & 左到右
    按位异或 ^ 左到右
    按位或 | 左到右
    逻辑与 && 左到右
    逻辑或 || 左到右
    条件 ?: 从右到左
    赋值 =,+=,-=,等等 从右到左
    逗号 左到右

    公众号

    动动小手点点关注,就是对创作者最大的支持和赞同

  • 相关阅读:
    用JavaDoc生成项目文档
    thymeleaf参考手册
    转的一个Java基本功
    杂记
    修改Esxi克隆的CentOS的IP地址
    CentOS搭建socket5代理服务器
    CentOS上搭建Nginx + Mono 运行 asp.net
    启动PPT的时候一直配置vs2013的问题解决
    swift 元组
    swift 集合类型(二)
  • 原文地址:https://www.cnblogs.com/viyoung/p/12501717.html
Copyright © 2011-2022 走看看