Java-基本运算符


Java提供了一组丰富的运算符来操作变量,我们可以将所有Java运算符分为以下几类:

  • 算术运算符

  • 关系运算符

  • 按位运算符

  • 逻辑运算符

  • 赋值运算符

  • 杂项运算符

算术运算符


算术运算符在数学表达式中的使用方式与在代数中使用的方式相同。

下表列出了算术运算符,假设变量A等于10,变量B等于20,则:

运算符
描述例子
+加,在运算符的任一侧添加值。A + B 等于 30
-减,从左侧操作数中减去右侧操作数。A - B 等于 -10
*乘,将运算符两边的值相乘。A * B 等于 200
/除,将左操作数除以右操作数。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定义了几个按位运算符,它们可以应用于整型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:

运算符描述例子
按位与,如果两个操作数当前位都为1,则结果位为1,否则为0。(A&B)将等于12,即0000 1100
按位或,如果任一操作数当前位为1,则结果位为1,否则为0。(A | B)将等于61,即0011 1101
^按位异或,如果两个操作数该位的值不同,则结果位为1,否则为0。(A ^ B)将等于49,即0011 0001
~按位取反,翻转所有位的值,即将1转为0, 0转为1。(~A)将等于-61,即1100 0011
<<左移,左操作数的值向左移动右操作数指定的位数。<<2 将等于240,即1111 0000
>>右移,左操作数的值向右移动右操作数指定的位数。A >> 2 将等于15,即1111
>>>零填充右移,左操作数的值向右移动右操作数指定的位数,并且移位后的值用零填充。A >>> 2 将等于15,即0000 1111

逻辑运算符


下表列出了逻辑运算符,假设变量A为真,变量B为假,则:

运算符描述例子
&&逻辑与,如果两个操作数都为真,则结果为真,否则为假。(A && B)为假
||逻辑或,如果两个操作数中的任何一个为真,则结果为真。(A || B)为真
!逻辑非,用于反转其操作数的逻辑状态,即如果条件为真,则结果为假。!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 = expr1 ? expr2 : expr3

运算规则:如果expr1的值为真,则将expr2的值赋给x,否则将expr3的值赋给x。

以下是一个例子:

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)

如果左操作数是右操作数的实例,则结果为真,以下是一个例子:

public class Test {

   public static void main(String args[]) {

      String name = "James";

      // 结果为真,因为name是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运算符的优先级


运算符优先级确定表达式中术语的分组,优先级较高的运算符将首先被运算。

注意:为保证代码可读性,要用括号确保想要的优先级。

下表列出了运算符的优先级,从高到低展示。

分类运算符结合方向
后缀expression++ expression--左到右
一元++expression --expression +expression -expression ~ !右到左
乘除* / %左到右
加减+ -左到右
移位<< >> >>>左到右
大小<>左到右
等于== !=左到右
按位与&左到右
按位异或^左到右
按位或|

左到右

逻辑与&&左到右
逻辑或||左到右
条件
?:右到左
赋值= += -= *= /= %= ^= |= <<= >>= >>>=右到左

接下来是什么?


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