日常开发中,接触到的都是常见的运算符,且并不复杂,这里也只介绍最常用的一些用法。
目录
- 一、运算符分类
- 二、运算符优先级
一、运算符分类
1、运算符按照其要求的操作数数目来分,可以有单目运算符、双目运算符和三目运算符,它们分别对应于1个、2个、3个操作数。
2、运算符按功能来分,有算术运算符、赋值运算符、比较/关系运算符、逻辑运算符、位运算符、条件运算符、instanceof 运算符。
2.1、算术运算符
算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。
操作符 | 名称 | 描述 |
---|---|---|
+ | 加法 | 相加运算符两侧的值 |
– | 减法 | 左操作数减去右操作数 |
* | 乘法 | 相乘操作符两侧的值 |
/ | 除法 | 左操作数除以右操作数 |
% | 取余 | 左操作数除以右操作数的余数 |
++ | 自增 | 操作数的值增加1 |
-- | 自减 | 操作数的值减少1 |
++ 在变量名之前,表示先自增,自增完成之后才会参与其他运算。
++ 在变量名之后,表示先拿变量的原来的值参与运算,然后再自增。
-- 在变量名之前,表示先自减,自减完成之后才会参与其他运算。
-- 在变量名之后,表示先拿变量的原来的值参与运算,然后再自减。
2.2、赋值运算符
操作符 | 名称 | 描述 |
---|---|---|
= | 赋值 | 右操作数的值赋给左侧操作数 |
+= | 加等 | 左操作数和右操作数相加赋值给左操作数 (a+=b 等同于 a = a+b) |
-= | 减等 | 左操作数和右操作数相减赋值给左操作数 (a-=b 等同于 a = a-b) |
*= | 乘等 | 左操作数和右操作数相乘赋值给左操作数 (a*=b 等同于 a = a*b) |
/= | 除等 | 左操作数和右操作数相除赋值给左操作数 (a/=b 等同于 a = a/b) |
%= | 取余等 | 左操作数和右操作数取余后赋值给左操作数 (a%=b 等同于 a = a%b) |
<< = | 左移等 | 左移位赋值运算符 (a<<=b 等同于 a = a<<b) |
>> = | 右移等 | 右移位赋值运算符 (a>>=b 等同于 a = a>>b) |
^ = | 异或等 | 按位异或赋值操作符 (a^=b 等同于 a = a^b) |
&= | 与等 | 按位与赋值运算符 (a&=b 等同于 a = a&b) |
| = | 或等 | 按位或赋值操作符 (a|=b 等同于a = a|b) |
注意:除了=以外,其余的赋值运算符要求这个变量必须有初始值。
2.3、比较/关系运算符
比较运算符的结果一定是boolean类型,也叫关系运算符
操作符 | 名称 | 描述 |
---|---|---|
> | 大于 | |
< | 小于 | |
== | 等于 | |
>= | 大于等于 | |
<= | 小于等于 | |
!= | 不等于 |
2.4、逻辑运算符
操作符 | 名称 | 描述 |
---|---|---|
&& | 短路与 | 当且仅当两个操作数都为真,条件才为真。如果前边的表达式的结果为false,则后边的表达式就不再运算。 |
& | 逻辑与 | 当且仅当两个操作数都为真,条件才为真。 |
| | | 短路或 | 如果任何两个操作数任何一个为真,条件为真。如果前边的表达式的结果为true,则后边的表达式就不再运算。 |
| | 逻辑或 | 如果任何两个操作数任何一个为真,条件为真。 |
! | 逻辑非 | 用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false |
2.5、位运算符
Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。位运算符作用在所有的位上,并且按位运算。
操作符 | 名称 | 描述 |
---|---|---|
& | 按位& | 如果相对应位都是1,则结果为1,否则为0 |
| | 按位或 | 如果相对应位都是0,则结果为0,否则为1。 |
^ | 异或 | 如果相对应位值相同,则结果为0,否则为1 |
~ | 按位取反 | 翻转操作数的每一位,即0变成1,1变成0。 |
<< | 有符号按位左移 | 按位左移 |通常格式为:value << num,value按位左移num位 |
>> | 有符号按位右移 | 通常格式为:value >> num,value按位右移num位。 |
>>> | 无符号按位右移 | 通常格式为:value >> num,value按右移num位,移动得到的空位以零填充。 |
2.6、条件运算符
语法:条件 ? 结果一 : 结果二
例子:int k = i > j ? i : j;
2.7、instanceof 运算符
instanceof运算符,前一个操作符是一个引用变量,后一个操作数通常是一个类(可以是接口),用于判断前面的对象是否是后面的类,或者其子类、实现类的实例。如果是返回true,否则返回false。
二、运算符优先级
优先级由高到底的顺序依次是:
1. 括号级别最高。
2. 单目 > 算术 > 位移 > 比较/关系 > 逻辑 > 三目 > 赋值。
3. 除了单目运算符、赋值运算符和条件运算符,其他的运算符都是从左到右结合的。
一般优先级大家都研究的不多,所以java中复杂的运算都是用括号来增强可读性。