第一章 Java基础
运算符
常用运算符
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
- 其他运算符
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 false
1.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 | 赋值 | =、+=、-=、*=、/=、&=、|=、^=、~=、«=、»=、>>>= | 从右向左 |