算术运算符

算术操作符不能对 boolean 类型使用,可以对 char 类型使用,因为 char 类型是 int 类型的子集。

除操作符对整数使用,结果为整数。

取模运算符对整数和浮点数使用,都返回余数。

在某些情况下,复合赋值操作符比它的等价形式更有效率。

位运算符

运算符 运算结果
~ 按位取反
& 按位与
| 按位或
^ 按位异或
>> 右移
>>> 零填充右移
<< 左移
aboveEach= 按位复合赋值操作,除了 ~

负数使用补码表示。如 -a 的二进制表示获取步骤为:首先获得正数 a 的二进制表示,然后逐位取反,最后加 1 得到 -a 的二进制表示。使用的原因是这种表示方式可以用一个二进制数表示 +0 和 -0。

左移

value << num

将 value 的二进制表示中最高的 num 位去除,然后在后面用 0 补上去除的位数。
当对 byte 和 short 类型进行左移操作时,类型提升成 int 然后左移,得到的结果可能和预期的不一样。

右移

value >> num

右移时,空缺的高位使用最高位(即符号位)的值进行填充。

无符号右移

value >>> num

右移时,空缺的最高位用 0 填充。当对 byte 和 short 类型进行右移操作时,类型会提升为 int。

关系运算符

C/C++ 中,非零值为 true,零值为 false;Java 中,不存在这种用法,其他类型的值不能转换成 boolean 类型,需要显式使用关系运算符比较。

Boolean 逻辑运算符

运算符 运算结果
&
|
^ 异或
|| 短路法则或
&& 短路法则与
!
&=, |=, ^= 复合赋值

赋值运算符

可以使用赋值链(chain of assignments)。

int x, y, z;
x = y = z = 1;

三元运算符

? : 返回的结果不能为 void。

运算符优先级

从高到低为:

最高
++(后缀) ++(后缀)
++(前缀) ++(前缀) ~ ! +(一元) -(一元) (typeCast)
* / %
+ -
>> >>> <<
> >= < <= instanceof
== !=
&
^
|
&&
||
?:
->
= operator=
最低

添加括号不会使程序性能下降,对复杂的表达式添加括号易于阅读。

参考

[1] Herbert Schildt, Java The Complete Reference 11th, 2019.

 posted on 2024-04-18 14:20  x-yun  阅读(4)  评论(0编辑  收藏  举报