Java提供了一组丰富的操作符来操纵变量。我们可以将所有Java运算符分成以下组 -
算术运算符与数学表达式中使用的代数方法相同。下表列出了算术运算符 -
假设整数变量A保持10,变量B保持20,则 -
操作符 | 描述 | 例 |
---|---|---|
+(加法) | 在操作符的两边添加值。 | A + B将给予30 |
- (减法) | 从左手操作数减去右手操作数。 | A - B会给-10 |
*(乘法) | 在运算符的任一侧乘以值。 | A * B将给予200 |
/(司) | 用右手操作数除以左手操作数。 | B / A将给予2 |
%(模量) | 用右手操作数除以左手操作数,并返回余数。 | B%A将给0 |
++(增量) | 将操作数的值增加1。 | B ++给了21 |
- (减) | 将操作数的值减少1。 | B--给了19 |
Java语言支持以下关系运算符。
假设变量A保持10,变量B保持20,则 -
操作符 | 描述 | 例 |
---|---|---|
==(等于) | 检查两个操作数的值是否相等,如果是,则条件成立。 | (A == B)不正确。 |
!=(不等于) | 检查两个操作数的值是否相等,如果值不等于条件成为真。 | (A!= B)是真的。 |
>(大于) | 检查左操作数的值是否大于右操作数的值,如果是,则条件成为真。 | (A> B)不正确。 |
(少于) | 检查左操作数的值是否小于右操作数的值,如果是,则条件成为真。 | (A <B)是真的。 |
> =(大于或等于) | 检查左操作数的值是否大于或等于右操作数的值,如果是,则条件成为真。 | (A> = B)不正确。 |
<=(小于或等于) | 检查左操作数的值是否小于或等于右操作数的值,如果是,则条件成为真。 | (A <= B)是真的。 |
Java定义了几个按位运算符,可以将其应用于整数类型long,int,short,char和byte。
按位运算符对位执行,并执行逐位运算。假设a = 60和b = 13; 现在以二进制格式,他们将如下 -
a = 0011 1100
b = 0000 1101
-----------------
a&b = 0000 1100
a | b = 0011 1101
a ^ b = 0011 0001
〜a = 1100 0011
下表列出了按位运算符 -
假设整数变量A保持60,变量B保持13,则 -
操作符 | 描述 | 例 |
---|---|---|
&(按位和) | 如果二进制AND运算符存在于两个操作数中,则二进制AND运算符将对结果复制一位。 | (A和B)将给出12是0000 1100 |
| (按位或) | 二进制OR运算符如果存在于任一操作数中,则复制一位。 | (A | B)将给出61,其为0011 1101 |
^(按位异或) | 二进制XOR操作符复制该位,如果它设置在一个操作数中,而不是两者。 | (A ^ B)将给出49,其为0011 0001 |
〜(按位称赞) | 二进制补码运算符是一元的,具有“翻转”位的作用。 | (〜A)将给出-61,由于有符号的二进制数,它是2 0的补码形式的1100 0011。 |
<<(左移) | 二进制左移操作符。左操作数值左移由右操作数指定的位数。 | A << 2将给出240是1111 0000 |
>>(右移) | 二进制右移操作符。左操作数值被右操作数指定的位移动。 | A >> 2将给出15是1111 |
>>>(零填补右移) | 右移零填充操作符。左操作数值右移由右操作数指定的位数,移位值用零填充。 | A >>> 2将给出15是0000 1111 |
下表列出了逻辑运算符 -
假设布尔变量A为真,变量B为假,则 -
操作符 | 描述 | 例 |
---|---|---|
&&(逻辑和) | 称为逻辑AND运算符。如果两个操作数都不为零,则条件成立。 | (A && B)是假的 |
|| (逻辑或) | 称为逻辑或运算符。如果两个操作数中的任何一个非零,则条件成立。 | (A || B)是真的 |
!(逻辑不) | 称为逻辑非运算符。用于反转其操作数的逻辑状态。如果条件为真,则逻辑NOT运算符将为false。 | !(A && B)是真的 |
以下是Java语言支持的赋值运算符 -
操作符 | 描述 | 例 |
---|---|---|
= | 简单赋值运算符。将右侧操作数的值分配给左侧操作数。 | C = A + B将A的值分配给C |
+ = | 添加AND赋值运算符。它将右操作数添加到左操作数,并将结果分配给左操作数。 | C + = A等价于C = C + A |
- = | 减去AND赋值运算符。它从左操作数中减去右操作数,并将结果分配给左操作数。 | C - = A等价于C = C-A |
* = | 乘以AND赋值运算符。它将右操作数与左操作数相乘,并将结果分配给左操作数。 | C * = A等价于C = C * A |
/ = | 除以AND赋值运算符。它将左操作数与右操作数分开,并将结果分配给左操作数。 | C / = A等价于C = C / A |
%= | 模数和赋值运算符。它需要使用两个操作数的模数,并将结果分配给左操作数。 | C%= A等价于C = C%A |
<< = | 左移和赋值运算符。 | C << = 2与C = C << 2相同 |
>> = | 右移和赋值运算符。 | C >> = 2与C = C >> 2相同 |
&= | 按位AND赋值运算符。 | C&= 2与C = C&2相同 |
^ = | 按位异或运算符和赋值运算符。 | C ^ = 2与C = C ^ 2相同 |
| = | 按位包含OR和赋值运算符。 | C | = 2与C = C |相同 2 |
Java语言支持的其他操作系统还不多。
条件运算符也称为三进制运算符。该运算符由三个操作数组成,用于评估布尔表达式。运算符的目标是决定哪个值应该分配给变量。操作符写为 -
variable x = (expression) ? value if true : value if false
以下是一个例子 -
例
public class Test { public static void main(String args[]) { int a, b; a = 10; b = (a == 1) ? 20: 30; System.out.println( "Value of b is : " + b ); b = (a == 10) ? 20: 30; System.out.println( "Value of b is : " + b ); } }
输出结果如下 -
输出
Value of b is : 30 Value of b is : 20
此运算符仅用于对象引用变量。操作符检查对象是否是特定类型(类类型或接口类型)。instanceof运算符写为 -
( Object reference variable ) instanceof (class/interface type)
如果由操作符左侧的变量引用的对象通过右侧的类/接口类型的IS-A检查,则结果将为真。以下是一个例子 -
例
public class Test { public static void main(String args[]) { String name = "James"; // following will return true since name is type of String boolean result = name instanceof String; System.out.println( result ); } }
输出结果如下 -
输出
true
如果正在比较的对象与右侧的类型兼容,则该运算符仍将返回true。以下是另一个例子 -
例
class Vehicle {} public class Car extends Vehicle { public static void main(String args[]) { Vehicle a = new Car(); boolean result = a instanceof Car; System.out.println( result ); } }
输出结果如下 -
输出
true
运算符优先级决定表达式中术语的分组。这会影响表达式的评估。某些运算符的优先级高于其他运算符; 例如,乘法运算符的优先级高于加法运算符 -
例如,x = 7 + 3 * 2; 这里x被分配13,而不是20,因为operator *的优先级高于+,所以它首先被乘以3 * 2,然后加到7中。
这里,优先级最高的运算符出现在表的顶部,最底层的运算符出现在底部。在一个表达式中,先优先级较高的算子。
类别 | 操作符 | 关联性 |
---|---|---|
后缀 | >()[]。(点运算符) | 左到右 |
一元 | > ++ - - !〜 | 右到左 |
乘法 | > * / | 左到右 |
添加剂 | > + - | 左到右 |
转移 | >>> >>> << | 左到右 |
关系型 | >>> = <<= | 左到右 |
平等 | > ==!= | 左到右 |
按位AND | >& | 左到右 |
按位XOR | > ^ | 左到右 |
按位OR | > | | 左到右 |
逻辑与 | > && | 左到右 |
逻辑或 | > || | 左到右 |
有条件的 | ?: | 右到左 |
分配 | > = + = - = * = / =%= >> = << =&= ^ = | = | 右到左 |
下一章将介绍Java编程中的循环控制。本章将介绍各种类型的循环,以及如何在Java程序开发中使用这些循环以及它们正在使用的目的。