Java 学习之路——运算符

125 阅读3分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。

算数运算符

运算符运算范例结果
+正号+33
-负号b=4;-b-4
+5+510
-6-42
*3*412
/5/51
%取模(取余)7%52
++自增(前):先运算后取值a=2;b=++aa=3,b=3
++自增(后):先取值后运算a=2;b=a++a=2,b=3
--自减(前):先运算后取值a=2;b=--aa=1,b=1
--自减(后):先取值后运算a=2;b=a--a=1,b=2
+字符串连接"He"+"llo""Hello"
  • 取模运算:结果的符号与被模数的符号相同。
  • 自增 1 不会改变本身变量的数据类型。

赋值运算符

  1. 符号:=

    • 当 “ = ” 两侧数据不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。

    • 支持连续赋值。

      int i2,j2;
      i2 = j2 = 10;
      int i3 = 10,j3 = 20;
      
  2. 扩展赋值运算符:**+=、-=、*=、/=、%= **。

比较运算符

运算符运算范例结果
==相等于4==3false
!=不等于4!=3true
<小于4<3false
大于4>3true
<=小于等于4<=3false
>=大于等于4>=3true
instanceof检查是否是类的对象"Hello" instanceof Stringtrue
  • 比较运算符的结果都是 Boolean 型,也就是要么是 true,要么是 false 。
  • 比较运算符 “ == ” 不能误写成 “ = ” 。

逻辑运算符

运算符运算
&逻辑与
&&短路与
|逻辑或
||短路或
!逻辑非
逻辑异或
  • 逻辑运算符操作的都是 Boolean 类型的变量。

位运算符

运算符运算范例细节
<<左移3 << 2 = 12 --> 3 * 2 * 2 = 12空位补 0 ,被移除的高位丢弃,空缺位补 0 。
>>右移3 >> 1 =1 --> 3 / 2 = 1被移位的二进制最高位是 0 ,右移后,空缺位补 0 ;最高位是 1 ,空缺位补 1。
>>>无符号右移3 >>> 1 = 1 --> 3 / 2 = 1被移位二进制最高位无论是 0 或者是 1 ,空缺位都用 0 补。
&与运算6 & 3 = 2二进制进行 & 运算,只有 1 & 1 时结果为 1 ,否则是 0 。
|或运算6 | 3 = 7二进制进行 | 运算,只有 0 & 0 时结果为 0 ,否则是 1 。
异或运算6 ^ 3 = 5相同二进制位进行 ^ 运算,结果是 0 ;1 ^ 1 = 0,0 ^ 0 = 0 。
不相同二进制位 ^ 运算结果是 1 。1 ^ 0 = 1,0 ^ 1 = 1 。
~取反运算~6 = -7整数取反,各二进制码按补码各位取反。
负数取反,各二进制码按补码各位取反。
  • 位运算符是直接对整数的二进制进行的运算。

三元运算符

  1. 格式:

    • (条件表达式):表达式 1?表达式 2;

      public class Testm {
        public static void main(String[] args) {
          int m = 12;
          int n = 5;
          // 三元运算符是可以嵌套使用的。
          int max = (m > n)?"m大" : ((m == n)?"m和n相等" : "n大");
          System.out.println(max)
        }
      }
      
      • 条件表达式的结果为 Boolean 类型。

      • 条件表达式为 true 时,运算后的结果是表达式 1 。

      • 条件表达式为 false 时,运算后的结果是表达式 2 。

    • 表达式 1 和表达式 2 为同种类型

    • 三元运算符和 if-else 的联系与区别:

      • 三元运算符可简化 if-else 语句。
      • 三元运算符要求必须返回一个结果。
      • if 后的代码块可有多个语句。
  2. 三元运算符与 if-else 的转换:

    • 凡是可以使用三元运算符的地方,都可以改写为 if-else 。反之不成立。

运算符的优先级

  1. 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。

    运算方向符号优先级
    . () {} ; ,
    R --> L++ -- ~ !(data type)|
    L --> R* / %|
    L --> R+ -|
    L --> R<< >> >>>|
    L --> R< > <= >= instanceof|
    L --> R== !=|
    L --> R&|
    L --> R|
    L --> R||
    L --> R&&|
    L --> R|||
    R --> L? :|
    R --> L= *= /= %=|
    += -= <<= >>=v
    >>>= &= ^= |=
  2. 只有单目运算符、三元运算符、赋值运算符是从右向左运算的。