Basic 运算符
Java提供了一组丰富的操作符来操作变量。 我们可以将所有Java运算符划分为以下组 -
- 算术运算符
- 关系运算符
- 按位运算符
- 逻辑运算符
- 分配运算符
- 其它运算符
算术运算符 (The Arithmetic Operators)
算术运算符在数学表达式中的使用方式与在代数中使用的方式相同。 下表列出了算术运算符 -
假设整数变量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运算符存在于两个操作数中,则它会将结果复制到结果中。 | (A&B)将给出12,即0000 1100 |
| (按位或) | 二进制OR运算符如果存在于任一操作数中,则复制一位。 | (A | B)将给出61,即0011 1101 |
^(按位异或) | 二进制异或运算符如果在一个操作数中设置但不在两个操作数中设置,则复制该位。 | (A ^ B)将给出49,即0011 0001 |
〜 (按位翻转) | 二元一元补语运算符是一元的,具有“翻转”位的效果。 | 由于带符号的二进制数,(〜A)将给出-61,即2的补码形式的1100 0011。 |
<< (左移) | 二进制左移运算符。 左操作数值向左移动右操作数指定的位数。 | A << 2将给出240,即1111 0000 |
>>(右移) | 二进制右移运算符。 左操作数值向右移动右操作数指定的位数。 | A >> 2将给出15这是1111 |
>>>(零填充右移) | 右移零填充运算符。 左操作数值向右移动右操作数指定的位数,移位值用零填充。 | A >>> 2将给出15,即0000 1111 |
逻辑运算符 (The Logical Operators)
下表列出了逻辑运算符 -
假设布尔变量A保持为真,变量B保持为假,则 -
操作者 | 描述 | 例 |
---|---|---|
&&(逻辑和) | 称为逻辑AND运算符。 如果两个操作数都不为零,则条件成立。 | (A && B)是假的 |
|| (逻辑或) | 称为逻辑OR运算符。 如果两个操作数中的任何一个非零,则条件变为真。 | (A || B)是真的 |
! (逻辑不对) | 称为逻辑非运算符。 用于反转其操作数的逻辑状态。 如果条件为真,则Logical NOT运算符将为false。 | !(A && B)是真的 |
分配运算符
以下是Java语言支持的赋值运算符 -
操作者 | 描述 | 例 |
---|---|---|
= | 简单赋值运算符。 将右侧操作数的值分配给左侧操作数。 | C = A + B将A + B的值分配给C |
+= | 添加AND赋值运算符。 它将右操作数添加到左操作数并将结果分配给左操作数。 | C + = A等于C = C + A. |
-= | 减去AND赋值运算符。 它从左操作数中减去右操作数,并将结果赋给左操作数。 | C - = A相当于C = C - A. |
*= | 乘以AND赋值运算符。 它将右操作数与左操作数相乘,并将结果赋给左操作数。 | C * = A等于C = C * A. |
/= | 除法和赋值运算符。 它将左操作数与右操作数分开,并将结果赋给左操作数。 | C/= A相当于C = C/A. |
%= | 模数和赋值运算符。 它使用两个操作数来获取模数,并将结果赋给左操作数。 | C%= A等于C = C%A |
<<= | 左移AND赋值运算符。 | C << = 2与C = C << 2相同 |
>>= | 右移AND赋值运算符。 | C >> = 2与C = C >> 2相同 |
&= | 按位AND赋值运算符。 | C&= 2与C = C&2相同 |
^= | 按位异或和赋值运算符。 | C ^ = 2与C = C ^ 2相同 |
|= | 按位包含OR和赋值运算符。 | C | = 2与C = C |相同 2 |
混合操作符 (Miscellaneous Operators)
Java语言支持的其他运算符很少。
条件运算符(?:)
条件运算符也称为ternary operator 。 此运算符由三个操作数组成,用于计算布尔表达式。 运算符的目标是决定应将哪个值赋给变量。 运算符写成 -
variable x = (expression) ? value if true : value if false
以下是一个例子 -
Example
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 );
}
}
这将产生以下结果 -
Output
Value of b is : 30
Value of b is : 20
instanceof运算符
此运算符仅用于对象引用变量。 运算符检查对象是否是特定类型(类类型或接口类型)。 instanceof运算符写成 -
( Object reference variable ) instanceof (class/interface type)
如果运算符左侧的变量引用的对象通过IS-A检查右侧的类/接口类型,则结果为真。 以下是一个例子 -
Example
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 );
}
}
这将产生以下结果 -
Output
true
如果要比较的对象是与右侧类型兼容的赋值,则此运算符仍将返回true。 以下是另一个例子 -
Example
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 );
}
}
这将产生以下结果 -
Output
true
Java运算符的优先级
运算符优先级确定表达式中的术语分组。 这会影响表达式的计算方式。 某些运算符的优先级高于其他运算符; 例如,乘法运算符的优先级高于加法运算符 -
例如,x = 7 + 3 * 2; 这里x被赋值13而不是20,因为operator *的优先级高于+,所以它首先乘以3 * 2然后加到7中。
此处,具有最高优先级的运算符显示在表的顶部,具有最低优先级的运算符显示在底部。 在表达式中,将首先评估更高优先级的运算符。
类别 | 操作者 | 关联性 |
---|---|---|
Postfix | 表达式++表达式 - | 左到右 |
Unary | ++表达式--expression + expression -expression~! | 右到左 |
Multiplicative | * /% | 左到右 |
Additive | + - | 左到右 |
Shift | << >> >>> | 左到右 |
Relational | <> <=> = instanceof | 左到右 |
Equality | ==!= | 左到右 |
Bitwise AND | & | 左到右 |
Bitwise XOR | ^ | 左到右 |
Bitwise OR | | | 左到右 |
Logical AND | && | 左到右 |
Logical OR | || | 左到右 |
Conditional | ?: | 右到左 |
Assignment | = + = - = * =/=%= ^ = | = << = >> = >>> = | 右到左 |
接下来是什么 (What is Next?)
下一章将介绍Java编程中的循环控制。 本章将描述各种类型的循环以及如何在Java程序开发中使用这些循环以及它们的使用目的。