Java.io包教程

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

运算符描述示例
检查两个操作数的值是否相等,如果是,则条件变为真.(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&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程序开发中使用这些循环以及它们的用途.