本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
算数运算符
| 运算符 | 运算 | 范例 | 结果 |
|---|---|---|---|
| + | 正号 | +3 | 3 |
| - | 负号 | b=4;-b | -4 |
| + | 加 | 5+5 | 10 |
| - | 减 | 6-4 | 2 |
| * | 乘 | 3*4 | 12 |
| / | 除 | 5/5 | 1 |
| % | 取模(取余) | 7%5 | 2 |
| ++ | 自增(前):先运算后取值 | a=2;b=++a | a=3,b=3 |
| ++ | 自增(后):先取值后运算 | a=2;b=a++ | a=2,b=3 |
| -- | 自减(前):先运算后取值 | a=2;b=--a | a=1,b=1 |
| -- | 自减(后):先取值后运算 | a=2;b=a-- | a=1,b=2 |
| + | 字符串连接 | "He"+"llo" | "Hello" |
- 取模运算:结果的符号与被模数的符号相同。
- 自增 1 不会改变本身变量的数据类型。
赋值运算符
-
符号:=
-
当 “ = ” 两侧数据不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。
-
支持连续赋值。
int i2,j2; i2 = j2 = 10; int i3 = 10,j3 = 20;
-
-
扩展赋值运算符:**+=、-=、*=、/=、%= **。
比较运算符
| 运算符 | 运算 | 范例 | 结果 |
|---|---|---|---|
| == | 相等于 | 4==3 | false |
| != | 不等于 | 4!=3 | true |
| < | 小于 | 4<3 | false |
| 大于 | 4>3 | true | |
| <= | 小于等于 | 4<=3 | false |
| >= | 大于等于 | 4>=3 | true |
| instanceof | 检查是否是类的对象 | "Hello" instanceof String | true |
- 比较运算符的结果都是 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?表达式 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 后的代码块可有多个语句。
-
-
三元运算符与 if-else 的转换:
- 凡是可以使用三元运算符的地方,都可以改写为 if-else 。反之不成立。
运算符的优先级
-
运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。
运算方向 符号 优先级 . () {} ; , 高 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 >>>= &= ^= |= 低 -
只有单目运算符、三元运算符、赋值运算符是从右向左运算的。