2.2 运算符

如果你具有其他语言(比如C语言)的编程经验,对于表2-2所总结的Java运算符的优先级应该并不陌生。所有的编程语言都有类似的运算符以支持运算。

表2-2 运算符优先级

在表2-2中,靠近表顶部的运算符优先级最高。具有较高优先级的运算符在相对较低的优先级的运算符之前被评估。在同一行上的运算符具有相同的优先级。当在相同的表达式中出现相同优先级的运算符时,必须首先对该规则进行评估。除了赋值运算符外,所有二进制运算符进行评估时都是从左到右,赋值操作符都是从右到左。

2.2.1 赋值运算符

最常用和最简单的运算符就是赋值运算符=,用法如下:

   int cadence = 0;
   int speed = 0;
   int gear = 1;

该运算符也用于对象的引用关联。

2.2.2 算术运算符

算术运算符如表2-3所示。

表2-3 算术运算符

以下是算术运算符的一些示例:

输出为:

   1 + 2 = 3
   3 - 1 = 2
   2 * 2 = 4
   4 / 2 = 2
   2 + 8 = 10
   10 % 7 = 3

需要注意的是,“+”除了用于算术运算外,还可以用于字符串连接。以下是一个字符串连接的例子:

输出为:

   Hello World!

2.2.3 一元运算符

一元运算符只需要一个操作数,如表2-4所示。

表2-4 一元运算符

下面是一元运算符的一些示例:

输出:

   1
   0
   1
   -1
   false
   true

递增和递减运算符可以在操作数之前或者之后使用,比如i++和++i。两者的唯一区别是,如果递增或递减运算符放在其运算数前面(比如++i),Java就会在获得该运算数的值之前执行相应的操作,并将其用于表达式的其他部分;如果运算符放在其运算数后面(i++),Java就会先获得该操作数的值再进行递增或递减运算。具体的可以看下面的示例:

输出:

   4
   5
   6
   6
   7

2.2.4 等价和关系运算符

等价和关系运算符如表2-5所示。

表2-5 等价和关系运算符

等价和关系运算符的例子如下:

输出为:

   value1 != value2
   value1 < value2
   value1 <= value2

2.2.5 条件运算符

条件运算符如表2-6所示。

表2-6 条件运算符

以下是条件与、条件或的运算符的例子:

输出:

   value1 is 1 AND value2 is 2
   value1 is 1 OR value2 is 1

下面是一个三元运算符的例子,类似于if-then-else语句:

输出:

   1

2.2.6 instanceof运算符

instanceof用于匹配判断对象的类型,可以用来测试对象是否是类的一个实例、子类的实例或者是实现了一个特定接口的类的实例。

在下面的例子中,父类是Parent,接口是MyInterface,子类是Child继承了父类并实现了接口。

注意

Parent、Child及MyInterface是定义在InstanceofDemo类中的,这样的类和接口被称为内部类和内部接口。

输出为:

   obj1 instanceof Parent: true
   obj1 instanceof Child: false
   obj1 instanceof MyInterface: false
   obj2 instanceof Parent: true
   obj2 instanceof Child: true
   obj2 instanceof MyInterface: true

注意

null不是任何类的实例。

2.2.7 位运算符和位移运算符

位运算符和位移运算符适用于整型。

1.位运算符

表2-7总结了所有的位运算符。

表2-7 位运算符

以下是位运算符使用的例子:

输出为:

   2
2.位移运算符

首先阐述一下符号位的概念:

· 符号位是数的最后一位,不是用来计算的。

· 当符号位为0时,值为正数;当符号位为1时,值为负数。

· 无符号位时为正数,有符号位时为正数或者负数。

表2-8总结了所有的位移运算符。

表2-8 位移运算符

其中:

· 左移运算和右移运算移动后都会保留符号位!

· 右移(补零)移动后不保留符号位,永远为正数,因为其符号位总是被补零。

以下是位移运算符的例子:

输出为:

   -101<<1=-202
   -101<<2=-404
   -101<<3=-808
   -101<<4=-1616
   -101<<5=-3232
   -101<<6=-6464
   -101<<7=-12928
   -101<<8=-25856
   -101<<9=-51712
   -101<<10=-103424
   -101<<11=-206848
   -101<<12=-413696
   -101<<13=-827392
   -101<<14=-1654784
   -101<<15=-3309568
   -101<<16=-6619136
   -101<<17=-13238272
   -101<<18=-26476544
   -101<<19=-52953088
   -101<<20=-105906176
   -101<<21=-211812352
   -101<<22=-423624704
   -101<<23=-847249408
   -101<<24=-1694498816
   -101<<25=905969664
   -101<<26=1811939328
   -101<<27=-671088640
   -101<<28=-1342177280
   -101<<29=1610612736
   -101<<30=-1073741824
   -101<<31=-2147483648
   -101<<32=-101