运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。与其他编程语言类似,Java
也提供了一套丰富的运算符来操纵变量,这些运算符可具体划分为:
- 算术运算符
- 关系运算符
- 逻辑运算符
- 赋值运算符
- 运算符
- 三元运算符
一、算术运算符
算法运算符用在数学表达式中对数值类型
的变量进行运算,它们的作用和在数学中的作用一样,在Java
程序中使用非常多。
运算符 | 描述 | 范例 | 结果 |
---|---|---|---|
+ | 正号 | +6 | 6 |
- | 负号 | a=6; -a | -6 |
+ | 加 | 6+6 | 12 |
- | 减 | 6-6 | 0 |
* | 乘 | 6*6 | 36 |
/ | 除 | 6/6 | 1 |
% | 取模(取余) | 11%9 | 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 |
+ | 字符串相加 | "a"+"bc" | abc |
二、关系运算符
关系运算符也可以称为比较运算符
,用于比较和判断两个变量或常量的大小。关系运算符的结果都是boolean
类型,且关系表达式经常用在if
结构的条件中或循环结构的条件中。
运算符 | 描述 | 范例 | 结果 |
---|---|---|---|
== | 相等于 | 6==7 | false |
!= | 不等于 | 6!=7 | true |
< | 小于 | 5<6 | true |
> | 大于 | 5>6 | false |
<= | 小于等于 | 5<=6 | true |
>= | 大于等于 | 5>=6 | false |
instanceof | 检查是否是类的对象 | "abc" instanceof String | true |
三、逻辑运算符
逻辑运算符用于连接多个条件(多个关系表达式
),最终结果是一个boolean
值。
运算符 | 描述 | 范例 | 结果 |
---|---|---|---|
&& | 逻辑与,当且仅当两个操作数都为真,条件才为真 | A=true;B=true;A&&B | true |
|| | 逻辑或,如果任何两个操作数有一个为真,条件为真 | A=true;B=false;A||B | true |
! | 逻辑非,如果条件为true,则将得到false | A=true;!A | false |
^ | 逻辑异或,如果两个条件不同时,则将得到true,否则为false | (4<1)^(6>3) | true |
💭 短路逻辑运算符
(1)当使用逻辑与
时,在两个操作数都为true
时,结果才为true
,但当得到第一个操作为false
时,其结果就必定是false
,这时候就不会再判断第二个操作了。
(2)当使用逻辑或
时,在任何一个操作数为true
时,结果为true
,如果得到第一个操作为true
时,其结果就必定是true
,这时候就不会再判断第二个操作了。
四、赋值运算符
赋值运算符就是将某个运算后的值赋给指定的变量。
- 基本赋值运算符:
=
,比如int a = 10;
- 复合赋值运算符:
+=
、-=
、*=
、/=
、%=
、<<=
、>>=
、&=
、^=
、|=
,比如a += b;
等价于a = a + b;
💭 赋值运算特点
(1)运算顺序从右往左,比如int num = a + b + c;
,先计算好a + b + c
再赋值。
(2)赋值运算符左边只能是变量,右边可以是变量、表达式、常量值。
(3)复合赋值运算符会进行类型转换,比如byte b = 2; b += 3;
等价于b = (byte)(b + 3)
。
五、位运算符
位运算符用于整数类型(int
),长整型(long
),短整型(short
),字符型(char
),和字节型(byte
)等类型,位运算符作用在所有的位上,并且按位运算。现假设整数变量:
// 正数原码、反码、补码都一样(三码合一)
// 负数反码=它的原码符号位不变,其他位取反
// 负数补码=它的反码+1(负数的反码=负数的补码-1)
// 0的反码、补码都是0
// 00000010
byte A = 2;// 00000011
byte B = 3;
运算符 | 描述 | 范例 | 结果 |
---|---|---|---|
& | 按位与,若相对应位都是1,则结果为1,否则为0 | A&B | 2 (00000010) |
| | 按位或,若相对应位都是 0,则结果为 0,否则为 1 | A|B | 3 (00000011) |
^ | 按位异或,若相对应位值相同,则结果为0,否则为1 | A^B | 1 (00000001) |
~ | 按位取反,即0变成1,1变成0 | ~A | -3(10000011) |
>> | 算术右移,低位溢出,符号位不变,并用符号位补溢出的高位 | A>>2 | 1 (00000001) |
<< | 算术左移,符号位不变,低位补零 | A<<2 | 4 (00000100) |
>>> | 逻辑右移,也叫做无符号右移,低位溢出,高位补零 | A>>>2 | 1 (00000001) |
💭 注意细节
(1)应用在布尔值上时,与&&
和||
类似,&
和|
也会得到布尔值,但&
和|
不采取短路求值。
(2)不存在<<<
运算符。
六、三元运算符
三元运算符也称为条件运算符
,该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量。
// variable x = (expression) ? value if true : value if falseint a = 1;
int b = (a == 1) ? 20 : 30; // b = 20
// variable x = (expression) ? value if true : value if falseint a = 1;
int b = (a == 1) ? 20 : 30; // b = 20