常用运算符
算术运算符关系运算符逻辑运算符位运算符赋值运算符其他运算符 1.1 算术运算符
表格中的实例假设整数变量X的值为10,变量Y的值为20:
| 操作符 | 描述 |
|---|---|
| + | 加法 - 相加运算符两侧的值 |
| - | 减法 - 左操作数减去右操作数 |
| * | 乘法 - 相乘操作符两侧的值 |
| / | 除法 - 左操作数除以右操作数 |
| % | 取余 - 左操作数除以右操作数的余数 |
| ++ | 自增: 操作数的值增加1 |
| – | 自减: 操作数的值减少1 |
%前后操作数只能是 int 或者其对应的封装类型前缀自增自减法(++a,–a):先进行自增或者自减运算,再进行表达式运算。后缀自增自减法(a++,a–):先进行表达式运算,再进行自增或者自减运算
1.2 关系运算符
下表为Java支持的关系运算符
| 运算符 | 描述 |
|---|---|
| == | 检查如果两个操作数的值是否相等,如果相等则条件为真。 |
| != | 检查如果两个操作数的值是否相等,如果值不相等则条件为真。 |
| > | 检查左操作数的值是否大于右操作数的值,如果是那么条件为真。 |
| < | 检查左操作数的值是否小于右操作数的值,如果是那么条件为真。 |
| >= | 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。 |
| <= | 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。 |
1.3 逻辑运算符
下表列出了逻辑运算符的基本运算
| 操作符 | 描述 |
|---|---|
| && | 称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。 |
| | | | 称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。 |
| ! | 称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。 |
逻辑运算符短路
当使用与逻辑运算符 && 时,在两个操作数都为true时,结果才为true,但是当得到第一个操作为false时,其结果就必定是false,这时候就不会再判断第二个操作了。当使用或逻辑运算符 | | 时,在两个操作数都为false时,结果才为false,但是当得到第一个操作为true时,其结果就必定是true,这时候就不会再判断第二个操作了。
1.4 位运算符
Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。
| 操作符 | 描述 |
|---|---|
| & | 如果相对应位都是1,则结果为1,否则为0 |
| | | 如果相对应位都是 0,则结果为 0,否则为 1 |
| ^ | 如果相对应位值相同,则结果为0,否则为1 |
| 〜 | 按位取反运算符翻转操作数的每一位,即0变成1,1变成0。 |
| << | 按位左移运算符(算术左移)。左操作数按位左移右操作数指定的位数。 |
| >> | 按位右移运算符(算术右移)。左操作数按位右移右操作数指定的位数。 |
| >>> | 按位右移补零操作符(无符号右移)。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 |
位运算符作用在所有的位上,并且按位运算。假设X = 60,Y = 13;它们的二进制格式表示将如下:
X = 0011 1100 Y = 0000 1101 ----------------- X & Y = 0000 1100 X | Y = 0011 1101 X ^ Y = 0011 0001 ~X = 1100 0011 X << 2 = 240 X >> 2 = 15 X >>> 2 = 15
1.5 赋值运算符
下面是Java语言支持的赋值运算符:
| 操作符 | 描述 |
|---|---|
| = | 简单的赋值运算符,将右操作数的值赋给左侧操作数 |
| + = | 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数 |
| - = | 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数 |
| * = | 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数 |
| / = | 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数 |
| (%)= | 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数 |
| << = | 左移位赋值运算符 |
| >> = | 右移位赋值运算符 |
| &= | 按位与赋值运算符 |
| ^ = | 按位异或赋值操作符 |
| | = | 按位或赋值操作符 |
1.6 其他运算符 1.6.1 条件运算符(?:)
条件运算符也被称为三元运算符。该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量。
variable x = (expression) ? value if true : value if false1.6.2 instanceof 运算符
该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。如果运算符左侧变量所指的对象,是操作符右侧类或接口(class/interface)的一个对象,那么结果为真。
Java运算符的优先级
当多个运算符出现在一个表达式中,谁先谁后呢?这就涉及到运算符的优先级别的问题。在一个多运算符的表达式中,运算符优先级不同会导致最后得出的结果差别甚大。
一般而言,单目运算符优先级较高,赋值运算符优先级较低。算术运算符优先级较高,关系和逻辑运算符优先级较低。多数运算符具有左结合性,单目运算符、三目运算符、赋值运算符具有右结合性。
Java 语言中运算符的优先级共分为 14 级,其中 1 级最高,14 级最低。在同一个表达式中运算符优先级高的先执行。
| 优先级 | 类别 | 运算符 | 结合性 |
|---|---|---|---|
| 1 | 后缀 | ()、[]、{}、 . (点操作符) | 从左向右 |
| 2 | 一元 | !、+、-、~、++、– | 从右向左 |
| 3 | 乘性 | *、/、% | 从左向右 |
| 4 | 加性 | +、- | 从左向右 |
| 5 | 移位 | <<、>>、>>> | 从左向右 |
| 6 | 关系 | <、<=、>、>=、instanceof | 从左向右 |
| 7 | 相等 | ==、!= | 从左向右 |
| 8 | 按位与 | & | 从左向右 |
| 9 | 按位异或 | ^ | 从左向右 |
| 10 | 按位或 | | | 从左向右 |
| 11 | 逻辑与 | && | 从左向右 |
| 12 | 逻辑或 | || | 从左向右 |
| 13 | 条件 | ?: | 从右向左 |
| 14 | 赋值 | =、+=、-=、*=、/=、&=、|=、^=、~=、«=、»=、>>>= | 从右向左 |



