Java 简明教程
Java - Basic Operators
Java operators 是用于对变量和值执行各种操作的符号。通过使用这些运算符,我们可以执行加法、减法、检查小于还是大于等操作。
Java 中有不同类型的运算符,我们已将它们列在下面 -
-
Arithmetic Operators
-
Relational Operators
-
Bitwise Operators
-
Logical Operators
-
Assignment Operators
-
Misc Operators
Java Arithmetic Operators
算术运算符在数学表达式中使用的方式与其在代数中的使用方式相同。下表列出了算术运算符 −
假设整型变量 A 为 10,变量 B 为 20,那么 −
Operator |
Description |
Example |
+ (Addition) |
对运算符两边的值求和。 |
A + B 会给出 30 |
- (Subtraction) |
从左操作数减去右操作数。 |
A - B 会给出 -10 |
* (Multiplication) |
对运算符两边的值求积。 |
A * B 会给出 200 |
/ (Division) |
用左操作数除以右操作数。 |
B / A 会给出 2 |
% (Modulus) |
用左操作数除以右操作数并返回余数。 |
B % A 会给出 0 |
++ (Increment) |
使操作数的值增加 1。 |
B++ gives 21 |
— (Decrement) |
使操作数的值减少 1。 |
B-- gives 19 |
Java Relational Operators
Java 语言支持以下关系运算符。
假设变量 A 为 10,变量 B 为 20,那么 −
Operator |
Description |
Example |
== (equal to) |
检查两个操作数的值是否相等,如果相等,则条件变为真。 |
(A == B) 不为真。 |
!= (not equal to) |
检查两个操作数的值是否相等,如果值不相等,则条件变为真。 |
(A != B) 为真。 |
> (greater than) |
检查左操作数的值是否大于右操作数的值,如果大于,则条件变为真。 |
(A > B) 不为真。 |
< (less than) |
检查左操作数的值是否小于右操作数的值,如果小于,则条件变为真。 |
(A < B) 为真。 |
>= (大于或等于) |
检查左操作数的值是否大于或等于右操作数的值,如果大于或等于,则条件变为真。 |
(A >= B) 不为真。 |
⇐ (小于或等于) |
检查左操作数的值是否小于或等于右操作数的值,如果小于或等于,则条件变为真。 |
(A ⇐ B) 为真。 |
Java Bitwise Operators
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,则:
Operator |
Description |
Example |
& (bitwise and) |
二进制与运算符将位复制到结果中(如果它存在于两个操作数中)。 |
(A 和 B) 结果是 12,即 0000 1100 |
(bitwise or) |
二进制 OR 运算符会在任一操作数中存在的情况下复制比特。 |
|
(A |
B) 结果是 61,即 0011 1101 |
^ (bitwise XOR) |
二进制 XOR 运算符会在其中一个操作数中但不在两个操作数中都设置的情况下复制比特。 |
(A ^ B) 结果为 49,即 0011 0001 |
⁓ (bitwise compliment) |
二进制逻辑补运算符是单操作数运算符,它会“翻转”比特。 |
(⁓A) 由于有符号二进制数字形式,结果为 -61,即 1100 0011。 |
<< (left shift) |
二进制左移运算符。左操作数的值会向左移动由右操作数指定的比特数。 |
A << 2 的结果是 240,即 1111 0000 |
>> (right shift) |
二进制右移运算符。左操作数的值会向右移动由右操作数指定的比特数。 |
A >> 2 的结果是 15,即 1111 |
>>>(零填充右移) |
Java Logical Operators
下表列出了逻辑运算符:
假设布尔变量 A 为 true,变量 B 为 false,则:
Operator |
Description |
Example |
&& (logical and) |
称为逻辑 AND 运算符。如果两个操作数都非零,则条件变为 true。 |
(A && B) 为 false |
(logical or) |
||
称为逻辑 OR 运算符。如果两个操作数中任何一个非零,则条件变为 true。 |
(A |
|
B) is true |
! (logical not) |
称为逻辑 NOT 运算符。用于反转操作数的逻辑状态。如果条件为 true,则逻辑 NOT 运算符会将其变为 false。 |
The Assignment Operators
以下是 Java 语言支持的赋值运算符 −
Operator |
Description |
Example |
= |
简单赋值运算符。将右操作数的值赋给左操作数。 |
C = A + B 将 A + B 的值赋给 C |
+= |
添加和赋值运算符。它将右操作数加到左操作数,并将结果赋给左操作数。 |
C += A 等效于 C = C + A |
-= |
减和赋值运算符。它将左操作数减去右操作数,并将结果赋给左操作数。 |
C -= A 等于 C = C − A |
*= |
乘和赋值运算符。它将右操作数乘以左操作数,并将结果赋给左操作数。 |
C *= A 等效于 C = C * A |
/= |
除和赋值运算符。它将左操作数除以右操作数,并将结果赋给左操作数。 |
C /= A 等效于 C = C / A |
%= |
模运算和赋值运算符。它使用两个操作数取模,并将结果赋给左操作数。 |
C %= A 等效于 C = C % A |
<⇐ |
左移和赋值运算符。 |
C <⇐ 2 等效于 C = C << 2 |
>>= |
右移和赋值运算符。 |
C >>= 2 等效于 C = C >> 2 |
&= |
Bitwise AND assignment operator. |
C &= 2 等效于 C = C & 2 |
^= |
按位异或和赋值运算符。 |
C ^= 2 等同于 C = C ^ 2 |
= |
按位或和赋值运算符。 |
|
C |
= 2 等同于 C = C |
2 |
Java Miscellaneous Operators
Java 语言支持的其他几个运算符。
Conditional Operator ( ? : )
条件运算符又称为 ternary operator。该运算符由三个操作数组成,用于评估布尔表达式。该运算符的目标是决定应将哪个值分配给变量。该运算符写为 −
variable x = (expression) ? value if true : value if false
以下是示例 −
在这个示例中,我们创建了两个变量 a 和 b,并且使用 ternary operator 决定了 b 的值并打印出来了。
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 Operator
该运算符仅用于对象引用变量。该运算符检查对象是否为特定类型(类类型或接口类型)。instanceof 运算符写为 −
( Object reference variable ) instanceof (class/interface type)
如果运算符左侧变量引用的对象通过了右侧类/接口类型的 IS-A 检查,则结果将为 true。以下是示例 −
Example
在此示例中,我们创建了一个 String 变量 name,然后使用 instanceof operator 检查 name 是否为 String。
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。以下是一个示例 −
在此示例中,我们创建一个类的变量 a Vehicle,然后使用 instanceof operator 检查 name 是否为类型 Car。
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 Operators Precedence & Associativity
运算符优先级决定表达式中术语的分组。这会影响表达式的评估方式。某些运算符的优先级高于其他运算符;例如,乘法运算符的优先级高于加法运算符 −
例如,x = 7 + 3 * 2;此处 x 分配为 13,而不是 20,因为运算符 * 的优先级高于 +,因此它首先与 3 * 2 相乘,然后加到 7 中。
此处,优先级最高的运算符显示在表顶部,优先级最低的运算符显示在表底部。在表达式中,将首先评估优先级较高的运算符。
Category |
Operator |
Associativity |
Postfix |
expression++ expression-- |
Left to right |
Unary |
++expression --expression +expression -expression ⁓ ! |
Right to left |
Multiplicative |
* / % |
Left to right |
Additive |
+ - |
Left to right |
Shift |
<< >> >>> |
Left to right |
Relational |
< > ⇐ >= instanceof |
Left to right |
Equality |
== != |
Left to right |
Bitwise AND |
& |
Left to right |
Bitwise XOR |
^ |
Left to right |
Bitwise OR |
||
Left to right |
Logical AND |
&& |
Left to right |
Logical OR |
|
Left to right |
||
Conditional |
?: |
Right to left |
Assignment |
= += -= *= /= %= ^= |
= <⇐ >>= >>>= |