第2篇——运算符

第2篇——运算符,第1张

运算符

下表是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 {}    // Child继承自Parent类,并实现了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官方教程

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/890170.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-14
下一篇 2022-05-14

发表评论

登录后才能评论

评论列表(0条)

保存