一. 运算符
算术运算符
赋值运算符
比较运算符(关系运算符)
逻辑运算符
位运算符
三元运算符
1. 算术运算符
1. 常用的算术运算符
运算符 |
运算 |
范例 |
结果 |
+ |
正号 |
+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=3;b=2 |
- - |
自减(前):先运算后取值 |
a=2;b=- -a |
a=1;b=1 |
- - |
自减(后):先取值后运算 |
a=2;b=a- - |
a=1;b=2 |
+ |
字符串连接 |
“He”+”llo” |
“Hello |
2. 除法运算 /
java 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public class AriTest { public static void main(String[] args) { int num1 = 12; int num2 = 5; int result1 = num1 / num2; System.out.println(result1);
int result2 = num1 / num2 * num2; System.out.println(result2);
double result3 = num1 / num2; System.out.println(result3);
double result4 = num1 / (num2 + 0.0); System.out.println(result4);
double result5 = (double) num1 / num2; System.out.println(result5); } }
|
2. 取余运算 %
1. java 代码
1 2 3 4 5 6 7 8 9
| public class AriTest { public static void main(String[] args) { System.out.println("12 % 5 = " + 12 % 5); System.out.println("-12 % 5 = " + -12 % 5); System.out.println("12 % -5 = " + 12 % -5); System.out.println("-12 % -5 = " + -12 % -5); } }
|
2. Tip
- 结果的符号与被模数(前面那个)的符号相同。
- 经常使用%来判断能否被除尽的情况。
3. 前后自增(减) ++ –
1.运算规则
(前)++ :先自增 1,后运算
(后)++ :先运算,后自增 1
(前)– :先自减 1,后运算
(后)– :先运算,后自减 1
自增 1 不会改变本身的数据类型
2. java 代码
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
| public class AriTest { public static void main(String[] args) { int a1 = 10; int b1 = ++a1; System.out.println("a1 = " + a1 + ",b1 = " + b1);
int a2 = 10; int b2 = a1++; System.out.println("a2 = " + a2 + ",b2 = " + b2);
int a3 = 10; ++a3;
short s1 = 10; s1 = (short) (s1 + 1); System.out.println(s1); s1++; System.out.println(s1);
int a4 = 10; int b4 = --a4; System.out.println("a4 = " + a4 + ",b4 = " + b4); } }
|
2. 赋值运算符
1. java 代码
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
| public class SetValueTest { public static void main(String[] args) { int i1 = 10; int j1 = 10; int i2 = 10, j2 = 20;
int i3, j3; i3 = j3 = 10;
int num1 = 10; num1 += 2; System.out.println(num1);
short s1 = 10; s1 += 2; System.out.println(s1);
int n1 = 10; n1 += (n1++) + (++n1); System.out.println(n1); } }
|
2. Tip
支持连续赋值。
扩展赋值运算符: +=, -=, *=, /=, %=
不会改变变量本身的数据类型
3. 比较运算符
1. 常用的比较运算符
运算符 |
运算 |
范例 |
结果 |
== |
相等于 |
4==3 |
false |
!= |
不等于 |
4!=3 |
true |
< |
小于 |
4<3 |
false |
> |
大于 |
4>3 |
true |
<= |
小于等于 |
4<=3 |
false |
>= |
大于等于 |
4>=3 |
true |
instanceof |
检查是否是类的对象 |
“Hello” instanceof String |
true |
2. java 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public class CompareTest { public static void main(String[] args) { int i = 10; int j = 20;
System.out.println(i == j); System.out.println(i = j);
boolean b1 = true; boolean b2 = false; System.out.println(b2 == b1); System.out.println(b2 = b1); } }
|
3. Tip
比较运算符的结果是 boolean 类型
区分 == 和 =
4.逻辑运算符
1. 常用的逻辑运算符
& —逻辑与
| —逻辑或
! —逻辑非
&& —短路与
|| —短路或
^ —逻辑异或
2.运算规则
a |
b |
a&b |
a&&b |
a|b |
a||b |
!a |
a^b |
true |
true |
true |
true |
true |
true |
false |
false |
true |
false |
false |
false |
true |
true |
false |
true |
false |
true |
false |
false |
true |
true |
true |
true |
false |
false |
false |
false |
false |
false |
true |
false |
3.结论
- 与:一假则假
- 或:有真则真
- 非:取反
- 异或:一样则假,不一样则真
4. java 代码
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 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| public class LogicTest { public static void main(String[] args) { boolean b1 = true; b1 = false; int num1 = 10; if(b1 & (num1++ > 0)){ System.out.println("我现在在北京"); }else{ System.out.println("我现在在南京"); } System.out.println("num1 = " + num1);
boolean b2 = true; b2 = false; int num2 = 10; if(b2 && (num2++ > 0)){ System.out.println("我现在在北京"); }else{ System.out.println("我现在在南京"); } System.out.println("num2 = " + num2);
boolean b3 = false; b3 = true; int num3 = 10; if(b3 | (num3++ > 0)){ System.out.println("我现在在北京"); }else{ System.out.println("我现在在南京"); } System.out.println("num3 = " + num3);
boolean b4 = false; b4 = true; int num4 = 10; if(b4 || (num4++ > 0)){ System.out.println("我现在在北京"); }else{ System.out.println("我现在在南京"); } System.out.println("num4 = " + num4); } }
|
5. Tip
逻辑运算符操作的都是 boolean 类型的变量
5. 位运算符(直接对整数的二进制进行的运算)
1. 常见的位运算符
运算符 |
运算 |
范例 |
<< |
左移 |
3 << 2 = 12 –> 322=12 |
>> |
右移 |
3 >> 1 = 1 –> 3/2=1 |
>>> |
无符号右移 |
3 >>> 1 = 1 –> 3/2=1 |
& |
与运算 |
6 & 3 = 2 |
| |
或运算 |
6 | 3 = 7 |
^ |
异或运算 |
6 ^ 3 = 5 |
~ |
取反运算 |
~6 = -7 |
2. 位运算符的细节
位运算符 |
细节 |
<< |
空位补 0,被移除的高位丢弃,空缺位补 0。 |
>> |
被移位的二进制最高位是 0,右移后,空缺位补 0;最高位是 1,空缺位补 1。 |
>>> |
被移位二进制最高位无论是 0 或者是 1,空缺位都用 0 补。 |
& |
二进制位进行&运算,只有 1&1 时结果是 1,否则是 0; |
| |
二进制位进行 | 运算,只有 0 | 0 时结果是 0,否则是 1; |
^ |
相同二进制位进行 ^ 运算,结果是 0;1^1=0 , 0^0=0 。 不相同二进制位 ^ 运算结果是 1。1^0=1 , 0^1=1 |
~ |
正数取反,各二进制码按补码各位取反。负数取反,各二进制码按补码各位取反 |
3. java 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public class BitTest { public static void main(String[] args) { int i = 21; System.out.println("i << 2 :" + (i << 2)); System.out.println("i << 3 :" + (i << 3)); System.out.println("i << 27 :" + (i << 27));
int m = 12; int n = 5; System.out.println("m & n :" + (m & n)); System.out.println("m | n :" + (m | n)); System.out.println("m ^ n :" + (m ^ n)); System.out.println("~m:" + (~m)); } }
|
4. Tip
- 位运算符操作的都是整型的数据
- << :在一定范围内,每向左移 1 位,相当于 * 2
- >> :在一定范围内,每向右移 1 位,相当于 / 2
6. 三元运算符
1. 结构:(条件表达式)? 表达式 1 : 表达式 2
2.java 代码
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
| public class SanYuanTest { public static void main(String[] args) { int m = 12; int n = 5;
int max = (m > n) ? m : n; System.out.println(max);
double num = (m > n)? 2 : 1.0;
n = 12; String maxStr = (m > n)? "m大" : ((m == n)? "m和n相等" : "n大"); System.out.println(maxStr);
int n1 = 12; int n2 = 30; int n3 = -43; int max1 = (n1 > n2)? n1 : n2; int max2 = (max1 > n3)? max1 : n3; System.out.println("三个数中的最大值为:" + max2); } }
|
3. Tip
- 条件表达式的结果为 boolean 类型.
- 根据条件表达式真或假,true 则表达式 1,false 则表达式 2.
- 表达式 1 和表达式 2 数据类型.
- 要求是一致的。
- 三元运算符可以嵌套使用.
- 可以使用三元运算符的地方,都可以改写为 if-else,不能反过来.
- 如果既可以三元运算符,又可以 if-else 结构,那么优先三元运算符。原因:简洁、执行效率高。
2. 运算符优先级
(从上到下由高到低)
|
.() {} ; , |
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 |
= *= /= %= |
|
+= -= <<= >>= |
|
>>>= &= ^= |= |
- 优先用括号
- 只有单目运算符、三元运算符、赋值运算符是从右向左运算的。