【Java专题】运算符

本篇记录常见的几种运算符。

算术运算符

  • 一元运算符
    单个变量 ++ --

  • 二元运算符
    两个变量 + - * / %

如果两个整数运算,其中有一个类型为long,则结果为long,否则全都是int
如果两个浮点数运算,连个数都是float,则结果为float,否则全都是double
求模时余数符号和左边变量符号一致。

  • 三元运算法
    三个变量 ? + :

赋值运算符 + 扩展运算符

使用=将右边的值赋值给左边的变量或常量
+= -= *= /= %=

连接符

只要两边有一个是String+操作就会变成连接操作,其实如果另一边不是String,会先进行类型转换

关系运算符

比较左右两边操作数,结果为boolean
< > == <= >= !=

< > == <= 仅针对数值类型和char(编码),==``!=所有类型都可以用来判断

逻辑运算符

布尔之间进行运算
& | ! ^ && ||

^ 异或,两边相同为false,不同为true
&& || 短路操作,如果左边可以决定运算的结果,就不会再看右边

位运算符

数值之间进行运行
& | ! ^ << >>

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class TestVars {
public static void main(String[] args) {
int i1 = -7 % 3;
System.out.println(i1); // -1
int i2 = 7 % -3;
System.out.println(i2); // 1 结果符号和左边操作数保持一致
int i3 = 32 / 3;
System.out.println(i3); // 10 向下取整
double d1 = 32 / 3;
System.out.println(d1); // 10.0 32/3 运算结果本身是一个 int,所以是先运算,再把 int 转为 double
double d2 = 32.0 / 3;
System.out.println(d2); // 10.6666666666666 有一个操作数是 double,结果就是 double
double d3 = 32 / 3.0;
System.out.println(d3); // 10.6666666666666 有一个操作数是 double,结果就是 double

// String s1 = 'a' + 'b'; // 错误: 不兼容的类型: int无法转换为String
System.out.println('a' + 'b'); // 195 编码相加 97 + 98
String s2 = "c" + "d";
System.out.println(s2); // "cd"

int i4 = 4;
int i5 = 5;
i4 *= i5 + 5;
System.out.println(i4); // 40 运算符右边是一个整体

boolean b1 = 'a' < 'b'; // 等价于 97 < 98
System.out.println(b1); // true

// int a = 4 / 0; // 除数为0会报错
boolean b2 = 4 < 3 && (5 < 4 / 0); // 如果使用 & 操作符,执行到右边就会报错
System.out.println(b2); // false 4 < 3 是 false,短路与不再计算右边的表达式

int i6 = 4 << 2; // 左移2位,相当于 4 * 2 * 2
System.out.println(i6); // 16
int i7 = 16 >> 2; // 右移2位,相当于 16 / 2 / 2
System.out.println(i7); // 4
}
}