Java简明教程系列(8) - 基本运算符

前言

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。

运算符 描述 举例
== (等于) 判断两边是否相等,如果相等返回true,否则返回false。 (A == B) = false.
!= (不等于) 判断两边是否不相等,如果相等返回false,否则返回true。 (A != B) = true
> (大于) 判断左边是否大于右边,如果是则返回true,否则返回false。 (A > B) = false
< (小于) 判断左边是否小于右边,如果是则返回true,否则返回false。 (A < B) = true
>= (大于等于) 判断左边是否大于或等于右边,如果是则返回true,否则返回false。 (A >= B) = false
<= (小于等于) 判断左边是否小于或等于右边,如果是则返回true,否则返回false。 (A <= B) = true

按位运算符

Java定义了多种按位运算符,可以用与integer,int,long,short,char和byte数据类型。
按位运算符用于二进制比特位(bit)与比特位之间的计算。假设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
下表中列出了具体的按位运算符说明与计算示例:

运算符 描述 举例
& (按位与) 二进制与操作符,操作符两边都为1是得到1,否则得到0 (A & B) 得到12,也就是二进制0000 1100
| (按位或) 二进制或操作符,操作符两边至少有一边为1时得到1,否则得到0 (A | B) 得到61,也就是0011 1101
^ (按位异或) 二进制异或操作符,操作符有且只有一边为1时得到1,否则得到0 (A ^ B) 得到49,也就是0011 0001
~ (按位补码) 二进制补码运算符是一元的,具有“翻转”位的作用。 (~A )得到-61也就是1100 0011,二进制补码形式。
<< (左移) 二进制左移运算符。 左操作数的值向左移动右操作数指定的位数。 A << 2 得到240,也就是二进制1111 0000
>> (右移) 二进制右移运算符。 左操作数的值向右移动右操作数指定的位数。 A >> 2得到15,也就是1111
>>> (0填充右移) 右移零填充运算符。 左操作数的值向右移动右操作数指定的位数,并且移位后的值用零填充。 A >>>2得到15,也就是0000 1111

逻辑运算符

下表中详细说明了逻辑运算符,其中假设A为true(真),B为false(假)。

运算符 描述 举例
&& (逻辑与) 逻辑与操作符。当操作符两边都为true时,表达式返回为true,否则为false。 (A && B) 为 false
|| (逻辑或) 逻辑或操作符。当操作符两边至少有一边为true时,表达式返回true,否则返回false。 (A
! (逻辑非) 逻辑非操作符。用于将表达式结果反转,例如表达式为true时,使用“非”运算后结果为false;当表达式为false时,使用“非”运算后结果为true。 !(A && B) 为 true

赋值运算符

下表中详细列举了Java中的赋值运算符。

操作符 说明
= 简单的等号赋值运算符。将等号右边的值赋给左边。
+= 将运算符左右两边的值相加后得到的值,赋值给运算符左边的变量
-= 将运算符左右两边的值相减后得到的值,赋值给运算符左边的变量
*= 将运算符左右两边的值相乘后得到的值,赋值给运算符左边的变量
/= 将运算符左右两边的值相除后得到的值,赋值给运算符左边的变量
%= 将运算符左右两边的值取模后得到的值,赋值给运算符左边的变量
<<= 将运算符左边的值左移右边的数值对应的位数后,赋值给运算符左边的变量
>>= 将运算符左边的数值右移右边的数值对应的位数后,赋值给运算符左边的变量
&= 将运算符左边的值与右边的值进行按位与操作后,将得到的值赋给左边的变量
^= 将运算符左边的值与右边的值进行按位异或操作后,将得到的值赋给左边的变量
|= 将运算符左边的值与右边的值进行按位或操作后,将得到的值赋给左边的变量

杂项运算符

除了上文中提及的运算符之外,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 );
   }
}

instanceof操作符

这个操作符仅用于对象的引用变量,用来检查对象是否是一种特定的类型(类的类型或接口类型)。instanceof的用法如下:

( Object reference variable ) instanceof  (class/interface type)

如果左侧的变量是右侧的类/接口的变量引用,那么表达式就返回true。下面是一个使用的示例:

public class Test {

   public static void main(String args[]) {

      String name = "James";
      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 从左到右
相等 == != 从左到右
按位与 & 从左到右
按位异或 ^ 从左到右
按位或 | 从左到右
逻辑与 && 从左到右
逻辑或 || 从左到右
条件运算符 ?: 从右到左
赋值运算符 = += -= *= /= %= ^= |= <<= >>= >>>= 从右到左

本篇小结

更多交流,欢迎加群(584017112):

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章