Java运算符

算术运算符

算术运算符用在数学表达式中,主要实现的是算术运算,如常见的加减乘除等。

表格中的例子中,变量 a 的值为 5,变量 b 的值为 3,变量 i 的值为 1:

算术运算符名称描述类型举例
+加法相加运算符两侧的值双目运算符a + b 等于 8
-减法左操作数减去右操作数双目运算符a - b 等于 2
*乘法相乘操作符两侧的值双目运算符a * b 等于 15
/除法左操作数除以右操作数双目运算符a / b 等于 1
%取余左操作数除右操作数的余数双目运算符a % b 等于 2
++自增操作数的值增加 1单目运算符++i(或 i++) 等于 2
自减操作数的值减少 1单目运算符–i(或 i–) 等于 0

其中,自增 (++) 和自减 (–) 运算符有两种写法:前缀(++i,–i)后缀(i++,i–)

  • 前缀自增自减法 (++i,–i): 先进行自增或者自减运算,再进行表达式运算。
  • 后缀自增自减法 (i++,i–): 先进行表达式运算,再进行自增或者自减运算。

位运算符

Java 定义了位运算符,应用于整数类型 (int),长整型 (long),短整型 (short),字符型 (char),和字节型 (byte) 等类型。位运算时先转换为二进制,再按位运算。

表格中的例子中,变量 a 的值为 60(二进制:00111100),变量 b 的值为 13(二进制:00001101):

位运算符名称描述举例
&按位与都是 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

1、<< 左移

​ 3 << 2 = 12

:4*8的最快方式:4 << 3

2、>> 右移

​ 8 >> 2 = 2

3、>>> 无符号右移

4、& 按位与运算 0 & 0 = 0,0 & 1 = 1,1 & 0 = 0,1 & 1 = 1

5、| 按位或运算 0 | 0 = 0,0 | 1 = 1,1 | 0 = 1,1 | 1 = 1

6、^ 按位异或运算,相同为0不同为1 0 ^ 0 = 0,0 ^ 1 = 1,1 ^ 0 = 1,1 ^ 1 = 0

7、~ 取反

逻辑运算符

逻辑运算符是通过运算符将操作数或等式进行逻辑判断的语句。

表格中的例子中,假设布尔变量 a 为真(true),变量 b 为假(false):

逻辑运算符名称描述类型举例
&& 或 &都为真,条件才为真双目运算符(a && b) 或 (a & b) 为假
|| 或 |任何一个为真,条件为真双目运算符(a || b) 或 (a | b) 为真
!用来反转操作数的逻辑状态单目运算符(!a)为假
^异或两个操作数不同,条件为真双目运算符(a ^ b) 为真

&&|| 是具有短路性质,当按优先级顺序计算到当前表达式时,表达式的结果可以确定整个表达式的结果时,便不会继续向后进行判断和计算,而直接返回结果。

例如:当使用 && 逻辑运算符时,在两个操作数都为 true 时,结果才为 true,但是当得到第一个操作为 false 时,其结果就必定是 false,这时候就不会再判断第二个操作了。在计算表达式 (a & b) && (a | b) 时,首先计算 a & b 得到了 false,因为之后是 &&,任何值与 false 进行与操作都是 false,所以可以不用再计算下去,而直接返回 a & b 的结果 false

关系运算符

关系运算符生成的是一个 boolean(布尔)结果,它们计算的是操作数的值之间的关系。如果关系是真实的,结果为 true(真),否则,结果为 false(假)。

表格中的例子中,假设变量 a 为 3,变量 b 为 5:

比较运算符名称描述举例
==等于若两个操作数相等,则条件为真(a == b) 为 false
!=不等于若两个操作数的值不相等,则条件为真(a != b) 为 true
>大于若左操作数大于右操作数,则条件为真(a > b) 为 false
<小于若左操作数小于右操作数,则条件为真(a < b) 为 true
>=大于等于若左操作数大于或等于右操作数,则条件为真(a >= b) 为 false
<=小于等于若左操作数小于或等于右操作数,则条件为真(a <= b) 为 true

除了上表列出的二元运算符,Java 还有唯一的一个三目运算符 ?:

语法格式:

布尔表达式 ?表达式 1 : 表达式 2;

运算过程:如果布尔表达式的值为 true,则返回表达式 1的值,否则返回表达式 2的值。

强调

  • ==!= 适用于所有的基本数据类型,其他关系运算符不适用于 boolean,因为 boolean 值只有 truefalse,比较没有任何意义。
  • ==!= 也适用于所有对象,可以比较对象的引用是否相同。

引用:Java 中一切都是对象,但操作的标识符实际是对象的一个引用。

运算符优先级

运算符的优先级是帮助我们在一个表达式中如何对于不同的运算符和相同的运算符,进行正确的运算顺序。

运算符的优先级不需要特别地去记忆它,比较复杂的表达式一般使用圆括号 () 分开,提高可读性。

优先级运算符结合性
1[ ] . ( ) (方法调用)从左向右
2! ~ ++ – +(一元运算符) -(一元运算符) ( )(强制类型转换) new从右向左
3* / %从左向右
4+ -从左向右
5<< >> >>>从左向右
6< <= > >= instanceof从左向右
7== !=从左向右
8&从左向右
9^从左向右
10|从左向右
11&&从左向右
12||从左向右
13?:从右向左
14= += -= *= /= %= &= |= ^= <<= >>= >>>=从右向左

1、 该表中优先级按照从高到低的顺序书写,也就是优先级为1的优先级最高,优先级14的优先级最低。

2、 结合性是指运算符结合的顺序,通常都是从左到右。从右向左的运算符最典型的就是负号,例如3±4,则意义为3加-4,符号首先和运算符右侧的内容结合。

3、 instanceof 作用是判断对象是否为某个类或接口类型

4、 注意区分正负号和加减号,以及按位与和逻辑与的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值