什么是运算符
- 运算符对一个或者多个值进行运算,并得到一个运算结果。
- 运算符的运算结果类型是固定的,有时候会根据被计算的值变化。比如两个int相加,结果的类型就是int。两个byte相加,返回值的类型就是byte。
- 混淆点:除赋值运算符外,运算符本身不会更改变量的值。
public class OprtNotChangeVariableValue { public static void main(String[] args) { int a = 100; System.out.println(a+1); System.out.println(a); a = a + 6; System.out.println(a); } }
取模运算符:%
- 用来计算余数
- 负数也可以被取模
- 负数也可以取模
- 小数也可以取模
public class ModCalc { public static void main(String[] args){ // num(被模数)的正负会影响结果的正负;而模数不会影响结果的正负。 // int num = 10; int num = -10; System.out.println(num % 2); System.out.println(num % -3); System.out.println(num % 4); System.out.println(num % 5); System.out.println(num % -6); } }
整数的除法运算
- int除以int还是int,不会变成浮点数。
- 如果想要得到浮点数,那么改变其中一个变量的类型为浮点型即可。
public class IntegerDiv { public static void main(String[] args){ // 想要得到浮点数的结果,只要把参与计算的数字任意一个改成浮点数即可。 double a = 10.0; int b = 3; System.out.println(a/b); } }
比较运算符
- >
- >=
- <
- <=
- !=
- ==
public class CompareOprt { public static void main(String[] args){ // 比较运算符 > >= < <= != == byte a = 10; byte b = 15; byte 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运算符。运算结果和 | 一样。
- 推荐使用双个的 && 和 || 运算符。
public class BooleanOprt { public static void main(String[] args){ // 开发中,我们尽量用双个and与运算符(&&)或者双个or或运算符(||) 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); // 第12行不会报错,这是因为当我们用到双或运算符时,系统在判断到真值时就会停下来。这里a是true于是直接返回了true,不会管后面的表达式是否正确。 System.out.println(a || (10 / 0 > 1)); // 第14行会报错,这是因为单个的或运算符会让系统计算后面的表达式,然而后面的表达式如果是不合法的,那么就会报错了。 System.out.println(a | (10 / 0 > 1)); } }
小括号运算符
小括号运算符内可以包含任何运算符,决定运算符的顺序。
public class ParentOprt { public static void main(String[] args) { int a = 10; int b = 88; boolean c = ((a+b)*a-9*(a+b)) == (a+b); System.out.println(c); } }
运算符优先级(优先级从上到下依次递减)
- ()
- !
- *, /, %
- +, -
- >, >=, <, <=
- ==
- !=
- &, &&, |, ||
- =
理解运算符,灵活记忆优先级
- 为什么等号的优先级最低?(因为等号是赋值运算符,要等到所有数值运算完毕才能去赋值。)
- 为什么布尔运算符的优先级低于比较运算符?(因为要先比较出结果才能看他们之间的逻辑关系,从而得到布尔值。)
- 为什么比较运算符的优先级比算数运算符低?(因为要等到数值运算完成后才能进行比较啊。)