Java - 基本运算符

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,然后:

运算符 描述 示例
检查两个操作数的值是否相等,如果是,则条件变为真. ( B)不成立.
!=(不等于) 检查两个值是否为操作数相等或不相等,如果值不相等则条件变为真. (A!= B)为真.
> (大于) 检查左操作数的值是否大于右操作数的值,如果是,则条件变为真. (A> B)不成立.
                         < (小于) 检查左操作数的值是否小于右操作数的值,如果是,则条件变为真. (A< B)为真.
> =(大于或等于) 检查左操作数的值是否大于或等于该值右操作数,如果是,则条件变为真. (A> = B)不成立.
< =(小于或等于) 检查左操作数的值是否小于或等于右操作数的值,如果是,则条件变为真. (A< = B)为真.

按位运算符

Java定义了几个bitw ise运算符,可以应用于整数类型,long,int,short,char和byte.

按位运算符处理位并执行逐位运算.假设 = 13;现在采用二进制格式,它们将如下所示;

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&plus; B将指定A&plus的值; B到C
&plus; = 添加AND赋值运算符.它将右操作数添加到左操作数并将结果赋给左操作数. C&plus; = A相当于C = C&plus; A
-  = 减去AND赋值运算符.它从左操作数中减去右操作数,并将结果赋给左操作数. C  -  = A相当于C = C  -  A
&ast; = 乘以AND赋值运算符.它将右操作数与左操作数相乘,并将结果赋值给左操作数. C&ast; = A相当于C = C&ast; 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&plus; 3&ast; 2;这里x分配13,而不是20,因为operator&ast;优先级高于&plus;所以它首先乘以3&ast; 2,然后加上7.

这里,优先级最高的运算符出现在表的顶部,最低的运算符出现在底部.在表达式中,将首先计算更高优先级的运算符.

类别 运算符 Associativity
Postfix 表达式++表达式 - 从左到右
Unary ++表达式 - 表达式+表达式 - 表达式〜! 从右到左
Multiplicative */% 从左到右
Additive +  - 从左到右
Shift <<>>>>> 从左到右
Relational <> 从左到右
Equality ==!= 从左到右
按位AND & 从左到右
按位异或 ^ 从左到右
按位OR | 从左到右
逻辑AND && 从左到右
逻辑OR || 从左到右
Conditional ?: 从右到左
Assignment = + =  -  = * =/=%= ^ = | = < 从右到左

下一步是什么?

下一步本章将解释Java编程中的循环控制.本章将描述各种类型的循环,以及如何在Java程序开发中使用这些循环以及它们的用途.