Java提供了一组丰富的操作符来操作变量.我们可以将所有Java运算符划分为以下组 :
算术运算符
关系运营商
按位运营商
逻辑运营商
分配运营商
杂项运算符
算术运算符
算术运算符在数学表达式中的使用方式与它们相同用在代数中.下表列出了算术运算符 :
假设整数变量A保持10,变量B保持20,然后是 :
运算符 | 描述 | 示例 |
---|---|---|
&加; (添加) | 在运算符的任一侧添加值. | A+ B将给出30 |
- (减法) | 从左侧操作数中减去右侧操作数. | A - B将给-10 |
* (乘法) | 将运算符两侧的值相乘. | A * B将给出200 |
/(Division) | 将左侧操作数除以右侧操作数. | 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定义了几个bitw ise运算符,可以应用于整数类型,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) | 二进制XOR运算符复制位它设置在一个操作数中,但不是两个. | (A ^ B)将给出49,即0011 0001 |
〜(按位与) | Binary Ones Complement Operator是一元的,具有'翻转'位的效果. | (~A)将给出-61,由于带符号的二进制数,它是2的补码形式的1100 0011. |
< (左移) | 二进制左移运算符.左操作数值向左移动右操作数指定的位数. | A<< 2将给出240这是1111 0000 |
>> (右移) | 二进制右移运算符.左操作数值向右移动右操作数指定的位数. | A>> 2将给出15这是1111 |
>>> (零填充右移) | 右移零填充运算符.左操作数值向右移动右操作数指定的位数,移位值用零填充. | A>>> 2将给出15,即0000 1111 |
逻辑运算符
下表列出了逻辑运算符 :
假设布尔变量A保持为真,变量B保持为假,然后是 :
运算符 | 描述 | 示例 |
---|---|---|
被称为逻辑AND运算符.如果两个操作数都不为零,则条件变为真. | (A&& B)是false | |
|| (逻辑或) | 被称为逻辑OR运算符.如果两个操作数中的任何一个非零,则条件变为真. | (A || B)是true |
! (逻辑上没有) | 被称为逻辑非运算符.用于反转其操作数的逻辑状态.如果条件为真,那么Logical NOT运算符将为false. | !(A&& B)为真 |
分配运算符
以下是Java语言支持的赋值运算符 :
运算符 | 描述 | 示例 |
---|---|---|
= | 简单赋值运算符.将右侧操作数的值分配给左侧操作数. | C = A+ B将指定A&plus的值; B到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 |
<< = | 左移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 |
其他运算符
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 ); }}
这将产生以下结果 :
输出
b的值是:30 b的值是:20
instanceof运算符
此运算符仅用于对象引用变量.运算符检查对象是否属于特定类型(类类型或接口类型). 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
Java运算符的优先级
运算符优先级确定表达式中的术语分组.这会影响表达式的计算方式.某些运营商的优先级高于其他运营商;例如,乘法运算符的优先级高于加法运算符 :
例如,x = 7+ 3* 2;这里x分配13,而不是20,因为operator*优先级高于+所以它首先乘以3* 2,然后加上7.
这里,优先级最高的运算符出现在表的顶部,最低的运算符出现在底部.在表达式中,将首先计算更高优先级的运算符.
类别 | 运算符 | Associativity |
---|---|---|
Postfix | 表达式++表达式 - | 从左到右 |
Unary | ++表达式 - 表达式+表达式 - 表达式〜! | 从右到左 |
Multiplicative | */% | 从左到右 |
Additive | + - | 从左到右 |
Shift | <<>>>>> | 从左到右 |
Relational | <> | 从左到右 |
Equality | ==!= | 从左到右 |
按位AND | & | 从左到右 |
按位异或 | ^ | 从左到右 |
按位OR | | | 从左到右 |
逻辑AND | && | 从左到右 |
逻辑OR | || | 从左到右 |
Conditional | ?: | 从右到左 |
Assignment | = + = - = * =/=%= ^ = | = < | 从右到左 |
下一步是什么?
下一步本章将解释Java编程中的循环控制.本章将描述各种类型的循环,以及如何在Java程序开发中使用这些循环以及它们的用途.