04.Java 运算符
1、运算符分类
- 算术运算符:+, -, *, /, %, ++, --
- 赋值运算符:=
- 关系运算符:>, <, >=, <=, ==, !=, instanceof
- 逻辑运算符:&&, ||, !
- 位运算符:&, |, ^, ~, >>, <<, >>>
- 条件运算符:?, :
- 扩展运算符:+=, -=, *=, /=
2、二元运算符(两个操作数)
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 25;
int d = 25;
System.out.println("a + b = " + (a + b) );
System.out.println("a - b = " + (a - b) );
System.out.println("a * b = " + (a * b) );
System.out.println("b / a = " + (b / a) );
}
3、关系运算符(返回布尔值)
运算符 |
描述 |
例子 |
== |
检查两个操作数的值是否相等,相等则条件为真 |
(A == B)为假 |
!= |
检查两个操作数的值是否相等,值不相等则条件为真 |
(A != B) 为真 |
> |
检查左操作数的值是否大于右操作数的值,如果是那么条件为真 |
(A > B)为假 |
< |
检查左操作数的值是否小于右操作数的值,如果是那么条件为真 |
(A < B)为真 |
>= |
检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真 |
(A >= B)为假 |
<= |
检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真 |
(A <= B)为真 |
4、取模运算(取余)
public static void main(String[] args) {
System.out.println(9 % 4); //1
System.out.println(-9 % -4); //-1
System.out.println(-10 % 4); //-2
System.out.println(9 % -4); //1
}
5、一元运算符
- 自增(++)自减(--)运算符是一种特殊的算术运算符,在算术运算符中需要两个操作数来进行运算,而自增自减运算符是一个操作数,分为前缀和后缀两种。
- 前缀自增自减法(++a,--a): 先进行自增或者自减运算,再进行表达式运算
- 后缀自增自减法(a++,a--): 先进行表达式运算,再进行自增或者自减运算
public static void main(String[] args) {
int a = 3;
//a = 3
System.out.println("a1:" + a);
//执行完后,b=3。先给b赋值,再自增。
int b = a++;
//a = 4
System.out.println("a2:" + a);
//执行完后,c=5。先自增,再给c赋值
int c = ++a;
//a = 5
System.out.println("a3:" + a);
}
6、逻辑运算符
- 逻辑与(and):&&,逻辑或(or):||,逻辑非(取反):!
- 假设布尔变量A为真,变量B为假
操作符 |
描述 |
例子 |
&& |
当且仅当两个操作数都为真,条件才为真。 |
(A && B)为假 |
| | |
如果任何两个操作数任何一个为真,条件为真。 |
(A | | B)为真 |
! |
如果条件为true,则逻辑非运算符将得到false。 |
!(A && B)为真 |
7、位运算符
- 假设整数变量 A 的值为 60 和变量 B 的值为 13:
A = 0011 1100
B = 0000 1101
操作符 |
描述 |
例子 |
& |
如果相对应位都是1,则结果为1,否则为0 |
(A&B),得到12,即0000 1100 |
| |
如果相对应位都是 0,则结果为 0,否则为 1 |
(A | B)得到61,即 0011 1101 |
^ |
如果相对应位值相同,则结果为0,否则为1 |
(A ^ B)得到49,即 0011 0001 |
〜 |
按位取反运算符翻转操作数的每一位,即0变成1,1变成0。 |
(〜A)得到-61,即1100 0011 |
<< |
按位左移运算符。左操作数按位左移右操作数指定的位数。 |
A << 2得到240,即 1111 0000 |
>> |
按位右移运算符。左操作数按位右移右操作数指定的位数。 |
A >> 2得到15即 1111 |
>>> |
按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 |
A>>>2得到15即0000 1111 |
JAVA中&&和&、||和|(短路与和逻辑与、短路或和逻辑或)的区别?
- &&逻辑与, ||逻辑或, 它们都是逻辑运算符
- &按位与, |按位或, 它们都是位运算符
- 而a&b或者a|b则是二进制的与或运算
- &同为1时为1,否则为0
- |同为0时为0,否则为1
7、条件运算符(三目)
- 三目条件运算符,语法格式:
x ? y : z
- 其中x为boolean类型表达式,先计算x的值,若为true,则整个三目运算的结果为表达式y的值,否则整个运算结果为表达式z的值。
public static void main(String[] args) {
int score = 80;
String type = score < 60 ? "不及格" : "及格";
//输出:type= 及格
System.out.println("type= " + type);
}
8、运算符优先级
优先级 |
运算符 |
1 |
. () 点和括号 |
2 |
++ -- 自增自减 |
3 |
new 新建对象 |
4 |
* / % 乘除模 |
5 |
+ - 加减 |
6 |
>> << >>> 右移 左移 无符号右移 |
7 |
> < >= <= 比较运算符 |
8 |
== != |
9 |
& 位和 |
10 |
^ 位异或 |
11 |
` |
12 |
! 逻辑非 |
13 |
&& 短路和 |
14 |
` |
15 |
?: 三目运算符 |
16 |
= += -= *= /= %= ^= 赋值 |
17 |
&= <<= >>= 位运算赋值 |