算术运算符是对数值类型的变量进行运算的,在 Java 程序中使用的非常多。
运算符 | 说明 | 例子 | 结果 |
+ | 加法-相加运算符两侧的值 | 9+9 | 18 |
- | 减法-左操作数减去右操作数 | 10-8 | 2 |
* | 乘法-相乘操作符两侧的值 | 7*8 | 56 |
/ | 除法-左操作数除以右操作数 | 9/9 | 1 |
% | 取余-左操作数除以右操作数的余数 | 11%9 | 2 |
++ |
自增(前):先运算后取值 自增(后):先取值后运算 |
a=2;b=++a; a=2;b=a++; |
a=3;b=3 a=3;b=2 |
-- |
自减(前):先运算后取值 自减(后):先取值后运算 |
a=2;b=--a; a=2;b=a--; |
a=1;b=1 a=1;b=2 |
(1)对于除号"/",它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。
int x = 10/3;//结果是3
(2)当对一个数取模时,可以等价a%b=a-a/b*b,这样我们看到取模的一个本质运算。
(3)当自增当做一个独立语言使用时,不管是++i;还是i++;都是一样的。
运算符 | 说明 | 例子 | 结果 |
== | 检查如果两个操作数的值是否相等,如果相等则条件为真。 | 8==7 | false |
!= | 检查如果两个操作数的值是否相等,如果值不相等则条件为真。 | 8!=7 | true |
< | 检查左操作数的值是否小于右操作数的值,如果是那么条件为真。 | 8<7 | false |
> | 检查左操作数的值是否大于右操作数的值,如果是那么条件为真。 | 8>7 | true |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。 | 8<=7 | false |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。 | 8>=7 | true |
(1)关系运算符组成的表达式,我们称为关系表达式。eg:a > b
(2)比较运算符"=="不能误写成"="。==是关系运算符,判断是不是相等,一个=是赋值
(3)关系运算符的结果都是 boolean 型,也就是要么是 true,要么是 false。
(4)关系表达式 经常用在 if 结构的条件中或循环结构的条件中
用于连接多个条件(多个关系表达式),最终的结果也是一个 boolean 值。
a | b | a&b | a&&b | a|b | a||b | !a | a^b |
true | true | true | true | true | true | false | false |
true | fasle | false | false | true | true | false | true |
false | true | false | false | true | true | true | true |
false | false | false | false | false | false | true |
false |
(1) a&b : & 叫逻辑与:规则:当 a 和 b 同时为 true ,则结果为 true, 否则为 false
(2) a&&b : && 叫短路与:规则:当 a 和 b 同时为 true ,则结果为 true,否则为 false
(3) a|b : | 叫逻辑或,规则:当 a 和 b ,有一个为 true ,则结果为 true,否则为 false
(4) a||b : || 叫短路或,规则:当 a 和 b ,有一个为 true ,则结果为 true,否则为 false
(5) !a : 叫取反,或者非运算。当 a 为 true, 则结果为 false, 当 a 为 false 是,结果为 true
(6) a^b: 叫逻辑异或,当 a 和 b 不同时,则结果为 true, 否则为 false
短路与&& : 条件 1&&条件 2
两个条件都为 true,结果为 true,否则 false
逻辑与&: 条件 1&条件 2
两个条件都为 true,结果为 true,否则 false
对于&&短路与而言,如果第一个条件为 false ,后面的条件不再判断
对于&逻辑与而言,如果第一个条件为 false ,后面的条件仍然会判断
//&&短路与 使用 int age = 50; if(age > 20 && age < 90) { System.out.println("&&短路与的使用"); } //&逻辑与使用 if(age > 20 & age < 90) { System.out.println("&逻辑与的使用"); }
(1) &&短路与:如果第一个条件为 false,则第二个条件不会判断,最终结果为 false,效率高
(2) & 逻辑与:不管第一个条件是否为 false,第二个条件都要判断,效率低
(3) 开发中, 我们使用的基本是使用短路与&&, 效率高
短路或||: 条件 1||条件 2
两个条件中只要有一个成立,结果为 true,否则为 false
|逻辑或: 条件 1|条件 2
只要有一个条件成立,结果为 true,否则为 false
||短路或:如果第一个条件为 true,则第二个条件不会判断,最终结果为 true,效率高
| 逻辑或:不管第一个条件是否为 true,第二个条件都要判断,效率低
// 短路或|| 的使用 int age = 50; if(age > 20 || age < 30) { System.out.println("短路或|| 的使用"); } // 逻辑或| 的使用 if(age > 20 | age < 30) { System.out.println("逻辑或| 的使用"); }
(1) ||短路或:如果第一个条件为 true,则第二个条件不会判断,最终结果为 true,效率高
(2) | 逻辑或:不管第一个条件是否为 true,第二个条件都要判断,效率低
(3) 开发中,我们基本使用 ||
! 非(取反): !条件
如果条件本身成立,结果为 false,否则为 true
a^b: 叫逻辑异或,当 a 和 b 不同时,则结果为 true, 否则为 false
//! 操作是取反 T->F , F -> T System.out.println(60 > 20); //T System.out.println(!(60 > 20)); //F
a^b: 叫逻辑异或,当 a 和 b 不同时,则结果为 true, 否则为 false
//a^b: 叫逻辑异或,当 a 和 b 不同时,则结果为 true, 否则为 false boolean b = (10 > 1) ^ ( 3 > 5); System.out.println("b=" + b);//T
赋值运算符就是将某个运算后的值,赋给指定的变量。
基本赋值运算符: eg: int a = 10;
复合赋值运算符:+= ,-= ,*= , /= ,%= 等
eg:a += b; [等价 a = a + b; ] a -= b; [等价 a = a - b; ]
(1) 运算顺序从右往左 int num = a + b + c;
(2) 赋值运算符的左边 只能是变量,右边 可以是变量、表达式、常量值
int num = 20; int num2= 78 * 34 - 10; int num3 = a;
(3) 复合赋值运算符等价于下面的效果。比如:a+=3;等价于 a=a+3; 其他类推
(4) 复合赋值运算符会进行类型转换。
byte b = 3; b += 2; // 等价 b = (byte)(b + 2); b++;// b = (byte)(b+1);
条件表达式 ? 表达式 1: 表达式 2;
1. 如果条件表达式为 true,运算后的结果是表达式 1;
2. 如果条件表达式为 false,运算后的结果是表达式 2;
3. 表达式 1 和表达式 2 要为可以赋给接收变量的类型(或可以自动转换)
4. 三元运算符可以转成 if--else 语句
类别 | 操作符 | 关联性 |
符号 | () , ; . {} | 从左到右 |
乘、除、余 | * / % | 从左到右 |
加、减 | + - | 从左到右 |
移位 | >> >>> << | 从左到右 |
关系 | > >= < <= | 从左到右 |
相等 | == != | 从左到右 |
按位与 | & | 从左到右 |
按位异或 | ^ | 从左到右 |
按位或 | | | 从左到右 |
逻辑与 | && | 从左到右 |
赋值 | = + = - = * = / =%= >> = << =&= ^ = | = | 从右到左 |
条件 | ?: | 从右到右 |
(1)运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。
(2)只有单目运算符、赋值运算符是从右向左运算的。
(3)不要背,使用多了,就熟悉了
总结:①(),{}等②单目运算 ++--③算术运算符④位移运算符⑤比较运算符⑥逻辑运算符⑦三元运算符⑧赋值运算符