Java 基本运算符
Java 提供了丰富的运算符来操作变量。我们可以将所有的Java运算符分为以下几组−
- 算术运算符
- 关系运算符
- 位运算符
- 逻辑运算符
- 赋值运算符
- 杂项运算符
算术运算符
算术运算符在数学表达式中的使用方式与它们在代数中的使用方式相同。以下表格列出了算术运算符−
假设整数变量A的值为10,变量B的值为20,则−
显示示例
运算符 | 描述 | 示例 |
---|---|---|
+ (加法) |
在运算符两侧添加数值。 | A + B将得到30 |
- (减法) |
从左操作数中减去右操作数。 | A – B将得到-10 |
* (乘法) |
在运算符两侧乘以数值。 | A * B将得到200 |
/ (除法) |
将左操作数除以右操作数。 | B / A将得到2 |
% (取模) |
将左操作数除以右操作数并返回余数。 | B % A将得到0 |
++ (递增) |
Operand的值增加1。 | B++得到21 |
-- (递减) |
Operand的值减少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 |
^ (按位异或) |
二进制XOR运算符,如果位在一个操作数中设置但在另一个操作数中未设置,则复制该位。 | (A ^ B) 将得到49,即0011 0001 |
~ (按位取反) |
二进制Ones补码运算符,是一元运算符,将各位进行’翻转’。 | (~A) 将得到-61,即1100 0011(使用补码形式表示的有符号二进制数字)。 |
<< (左移) |
二进制左移运算符,将左操作数的值向左移动由右操作数指定的位数。 | A << 2 将得到240,即1111 0000 |
>> (右移) |
二进制右移运算符,将左操作数的值向右移动由右操作数指定的位数。 | A >> 2 将得到15,即1111 |
>>> (无符号右移) |
无符号右移补零运算符,将左操作数的值向右移动由右操作数指定的位数,并用零填充移动的位置。 | A >>>2 将得到15,即0000 1111 |
逻辑运算符
以下表格列出了逻辑运算符-
假设布尔变量A为真,变量B为假,那么-
显示示例
运算符 | 描述 | 示例 |
---|---|---|
&& (逻辑与) |
称为逻辑与运算符。如果两个操作数都非零,则条件为真。 | (A && B) 为假 |
|| (逻辑或) |
称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 | (A || B) 为真 |
! (逻辑非) |
称为逻辑非运算符。用于颠倒操作数的逻辑状态。如果条件为真,则逻辑非运算符将返回假。 | !(A && B) 为真 |
赋值操作符
Java语言支持以下赋值操作符:
显示示例
运算符 | 描述 | 示例 |
---|---|---|
= |
简单赋值运算符。将右侧操作数的值赋给左侧操作数。 | 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 |
&= |
按位与和赋值运算符。 | C &= 2 相当于 C = C & 2 |
^= |
按位异或和赋值运算符。 | C ^= 2 相当于 C = C ^ 2 |
|= |
按位或和赋值运算符。 | 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 运算符
此运算符仅用于对象引用变量。该运算符检查对象是否属于特定类型(类类型或接口类型)。instanceof运算符的写法如下:
( Object reference variable ) instanceof (class/interface type)
如果左侧变量所引用的对象通过右侧的类/接口类型的IS-A检查,则结果为true。以下是一个示例 – 示例
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
Java运算符的优先级
运算符的优先级决定了表达式中项的分组方式。这会影响表达式的求值。某些运算符的优先级比其他运算符更高;例如,乘法运算符的优先级比加法运算符更高。
例如,x = 7 + 3 * 2
; 这里x被赋值为13,而不是20,因为乘法运算符*
的优先级比+高,所以它首先与3 * 2
相乘,然后再加到7中。
在这里,优先级最高的运算符出现在表格的顶部,优先级最低的运算符出现在底部。在一个表达式中,优先级更高的运算符会先进行求值。
分类 | 操作符 | 结合性 |
---|---|---|
后缀 | expression++ expression-- |
从左到右 |
一元 | ++expression –-expression +expression –expression ~ ! |
从右到左 |
乘法 | * / % |
从左到右 |
加法 | + - |
从左到右 |
位移 | << >> >>> |
从左到右 |
关系 | < > <= >= instanceof |
从左到右 |
相等 | == != |
从左到右 |
按位与 | & |
从左到右 |
按位异或 | ^ |
从左到右 |
按位或 | | |
从左到右 |
逻辑与 | && |
从左到右 |
逻辑或 | || |
从左到右 |
条件 | ?: |
从右到左 |
赋值 | = += -= *= /= %= ^= |= <<= >>= >>>= |
从右到左 |
接下来是什么?
下一章将解释Java编程中的循环控制。这一章将描述各种类型的循环以及这些循环在Java程序开发中如何使用以及用于什么目的。