Attic

Java运算符

Java  ·  

运算符:一种特殊的符号,用以表示数据的运算、赋值和比较等。包括:算术运算符赋值运算符关系运算符(比较运算符)、逻辑运算符位运算符三元运算符

 

 

算术运算符

算数运算符:对数据类型的变量进行运算。

 

演示 "/"(除法):

演示 "%"(取模):a % b = a - a / b * b;当a为小数时,a % b = a - (int)a / b * b

演示"++"(自增):

  1. 作为独立语句使用前++和后++都完全等价于i = i +1;
  2. 作为表达式使用,前++先自增后赋值后++先赋值后自增;
    • int j = 8;
      int k = ++j;         //等价于 j=j+1;k=j;
      int k = j++;          //等价于 k=j;j=j+1;
      System.out.println("k=" + k + "j=" + j);
    • int i = 1;
      i = i++;         //规则使用临时变量:①temp=i ②i=i+1 ③i=temp
      System.out.println(i);
    • int i = 1;
      i = ++i;         //规则使用临时变量:①i=i+1 ②temp=i ③i=temp
      System.out.println(i);
  3. 底层有类型转换
    • byte b = 3;
      b++;    //等价 b = (byte)(b + 1);

 

 

关系运算符(比较运算符)

关系运算符:结果都是boolean型,要么是true要么是false。常用在if结构的条件中或循环结构的条件中。

 

使用细节:

  1. 关系运算符组成的表达式称为关系表达式,如a > b;
  2. 比较运算符“==”不能误写成“=”,区分“==”与“=”。

 

 

逻辑运算符

逻辑运算符:用于连接多个条件(多个关系表达式),最终的结果也是一个boolean值。

逻辑运算规则

  1. a&b : & 叫逻辑与。规则:当a 和b 同时为true ,则结果为true, 否则为false;
  2. a&&b : && 叫短路与。规则:当a 和b 同时为true ,则结果为true,否则为false;
    • 区别
      • &&短路与:如果第一个条件为false,则第二个条件不会判断(不执行),最终结果是false,效率高;
      • &逻辑与:不管第一个条件是否为false,第二个条件都要判断(会执行),效率低;
      • 开发中,我们使用的基本是使用短路与&&,效率高。
        • int a = 4;
          int b = 9;
          if(a < 1 & ++b < 50) {
          System.out.println("ok300");}
          System.out.println("a=" + a + " b=" + b);// a=4。若为&&,则b=9;若为&,则b=10。
  3. a|b : | 叫逻辑或。规则:当a 和b ,有一个为true ,则结果为true,否则为false;
  4. a||b : || 叫短路或。规则:当a 和b ,有一个为true ,则结果为true,否则为false;
    • 区别
      • ||短路或:如果第一个条件为true,则第二个条件不会判断(不执行),最终结果是true,效率高;
      • |逻辑或:不管第一个条件是否为true,第二个条件都要判断(会执行),效率低;
      • 开发中,我们使用的基本是使用短路或||,效率高。
  5. !a : 叫取反。或者非运算。当a 为true, 则结果为false, 当a 为false 是,结果为true;
  6. a^b: 叫逻辑异或。当a 和b 不同时,则结果为true, 否则为false。

 

 

赋值运算符

赋值运算符:将某个运算后的值,赋给指定的变量。

 

特点

  1. 运算顺序从右向左;
  2. 赋值运算符的左边只能是变量,右边可以是变量、表达式、常量值;
  3. 复合赋值运算符会进行类型转换
    • byte b = 3;
      b += 2;    //等价 b = (byte)(b + 2);

 

 

三元运算符

三元运算符条件表达式?表达式1:表达式2

运算规则

  1. 如果条件表达式为true,运算后的结果是表达式1;
  2. 如果条件表达式为false,运算后的结果是表达式2。

使用细节

  1. 表达式1和表达式2要为可以赋给接收变量的类型(或可以自动/强制转换);
  2. (本质)三元运算符可以转成if - else语句。

 

 

位运算符

位运算符:按位与&、按位或|、按位异或^、按位取反~、算术右移>>、算术左移<<、逻辑右移(无符号右移)>>>。(没有<<<符号)

运算规则计算机运算是补码,运算结果是原码

  1. 按位与&:两位全是1,结果为1,否则为0;
  2. 按位或|:两位有一位是1,结果为1,否则为0;
  3. 按位异或^:两位一个为0,一个为1,结果为1,否则为0;
  4. 按位取反~:1 → 0,0 → 1:
  5. 算术右移>>:低位溢出,符号位不变,并用符号位补溢出的高位;本质:/ 2
  6. 算术左移<<:符号位不变,低位补0;本质:* 2
  7. 逻辑右移(无符号右移)>>>:低位溢出,高位补0。

 

 

运算符优先级

优先级:表达式中的运算顺序,上一行运算符总优先于下一行。只有单目运算符赋值运算符从右向左运算的。