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