什么是运算符?
- 运算符对一个或者多个值进行运算,并得出一个运算结果。
- 运算符的运算结果类型有的是固定的,有时候会根据被计算的值变化。比如两个 int 相加,结果的类型就是 int。 两个 byte 相加,返回值的类型就是int 。
- 混淆点:除赋值运算符外,运算符本身不会更改变量的值(除了赋值运算)。
int a = 10;
System.out.println(a + 1); // a 的值并没有被改变
a += 5;
System.out.println(a); // a 被重新赋值了,这时 a 改变了
取模运算符:%
用来计算余数。
- 负数也可以被取模
- 负数也可以取模
- 小数也可以取模(很少用到)
int num = 10;
System.out.println(num % 2); // 0
System.out.println(num % -3); // 1 ,跟 % 3 是一样的
System.out.println(num % 4); // 2
System.out.println(num % 5); // 0
System.out.println(num % -6); // 4 ,跟 % 6 是一样的
int num = -10; // 决定了取模后的值的正负
System.out.println(num % 2); // 0
System.out.println(num % -3); // -1
System.out.println(num % 4); // -2
System.out.println(num % 5); // 0
System.out.println(num % -6); // -4
除法运算符: /
int a = 10;
int b = 3;
System.out.println(a / b); // 3 ,因为是整数型,返回结果也是整数型
int a = 10;
double b = 3.0;
System.out.println(a / b); // 3.3333333333333335
比较运算符和布尔运算符
比较运算符
-
=
- <
- <=
- !=
- ==
返回 boolean 类型值。
int a = 10;
int b = 15;
int c = 10;
System.out.println(a > b);
System.out.println(a >= b);
System.out.println(a < b);
System.out.println(a <= b);
System.out.println(a != b);
System.out.println(a != c);
System.out.println(a >= c);
System.out.println(a <= c);
System.out.println(a == b);
System.out.println(a == c);
布尔运算符
!
叫做非运算符, not(取反)运算符。!true
是false
,!false
是true
。&
叫做且运算符,and 运算符。true & true
是true
,true & false
是false
。&&
叫做且且运算符,andand 运算符。运算结果和&
一样。|
叫做或运算符, or 运算符。true | false
是为true
,false | false
是为false
,true | true
是为true
。||
叫做或或运算符,oror 运算符。运算结果和|
一样。
boolean a = true;
boolean b = false;
System.out.println(a && b);
System.out.println(a & b);
System.out.println(a || b);
System.out.println(a | b);
System.out.println(a || (10 / 0 > 1)); // 当前面是 true 时,|| 后面代码不会被执行,这里不会报错
System.out.println(a | (10 / 0 > 1)); // 当前面是 true 时,| 后面代码也会被执行,这里会报错(被除数不能是 0)
// 代码中尽量不要使用 单个 & 和 |
小括号运算符
小括号运算符内可以包含任何运算符,决定运算符的顺序。
int a = 10;
int b = 88;
boolean c = ((a + b) * a - 9 * (a + b)) == (a + b);
System.out.println(c); // true
运算符优先级
()
!
*
,/
,%
+
,-
>
,>=
,<
,<=
==
!=
&
,&&
,|
,||
=
理解运算符,灵活记忆优先级
- 为什么等号的优先级最低?
- 为什么布尔运算符的优先级 低于 比较运算符?
- 为什么比较运算符的优先级 低于 算术运算符?