运算符
下表是java运算符的优先级表,按照从高到低排列。同一行中的运算符具有相同的优先级,除了赋值运算符之外的所有双目运算符都是从左到右求值,赋值运算符是从右向左求值。通常在使用中,复杂的运算符表达式都要求加上小括号来精确描述表达式的含义,这种做法使代码更易于阅读和维护。
运算符 | 优先级 |
---|
后缀 | expr++ expr– | 一元 | ++expr --expr +expr -expr ~ ! | 乘法的 | * / % | 加性的 | + - | 转移 | << >> >>> | 关系 | < > <= >= instanceof | 平等 | == != | 按位与 | & | 按位异或 | ^ | 按位或 | | | 逻辑与 | && | 逻辑或 | || | 三元 | ? : | 任务 | = += -= *= /= %= &= ^= | | |
Java作为类C语言,上表中的绝大多数运算符在C/C++中也存在,并且用法也是一致的。作为一份写给C/C++程序员的Java基础教程,我们只介绍那些在C/C++没有的运算符及其作用。
instanceof
运算符将instanceof对象与指定类型进行比较。您可以使用它来测试对象是类的实例、子类的实例还是实现特定接口的类的实例。相当于python中的isinstance函数。下面是官方教程中的例子:
class InstanceofDemo {
public static void main(String[] args) {
Parent obj1 = new Parent();
Parent obj2 = new Child();
System.out.println("obj1 instanceof Parent: "
+ (obj1 instanceof Parent));
System.out.println("obj1 instanceof Child: "
+ (obj1 instanceof Child));
System.out.println("obj1 instanceof MyInterface: "
+ (obj1 instanceof MyInterface));
System.out.println("obj2 instanceof Parent: "
+ (obj2 instanceof Parent));
System.out.println("obj2 instanceof Child: "
+ (obj2 instanceof Child));
System.out.println("obj2 instanceof MyInterface: "
+ (obj2 instanceof MyInterface));
}
}
class Parent {}
class Child extends Parent implements MyInterface {}
interface MyInterface {}
程序执行结果如下所示:
obj1 instanceof Parent: true
obj1 instanceof Child: false
obj1 instanceof MyInterface: false
obj2 instanceof Parent: true
obj2 instanceof Child: true
obj2 instanceof MyInterface: true
>>>
在讲">>>"运算符之前,我大概提一下,整型数值在计算机中是由补码表示的,浮点数则遵从IEEE754标准。如果你还不知道这些,那么你有兴趣,可以看看这些知识。好了,言归正传。在JavaSE和JavaEE中,移位运算符很少被使用,在JavaME中可能会被经常使用(实际上,就是嵌入式开发场景才会经常使用移位运算符)
由于符号位在高位,“有符号”左移运算符(<<)按位左移之后,后面的位补上0即可;“有符号”右移运算符(>>)按位右移之后,则是根据符号位的值补上0(符号位是0)或者1(符号位是1);而“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0。这一运算符是C/C++没有的。
下面是一点测试代码,你执行看看输出。
int a = -10;
System.out.println(Integer.toBinaryString(a));
a <<= 2;
System.out.println(Integer.toBinaryString(a));
a >>= 4;
System.out.println(Integer.toBinaryString(a));
a = -10;
a >>>=2;
System.out.println(Integer.toBinaryString(a));
参考资料:Java8官方教程
|