前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第2篇——运算符

第2篇——运算符

作者头像
zy010101
发布2022-05-10 07:58:50
1990
发布2022-05-10 07:58:50
举报
文章被收录于专栏:程序员

运算符

下表是java运算符的优先级表,按照从高到低排列。同一行中的运算符具有相同的优先级,除了赋值运算符之外的所有双目运算符都是从左到右求值,赋值运算符是从右向左求值。通常在使用中,复杂的运算符表达式都要求加上小括号来精确描述表达式的含义,这种做法使代码更易于阅读和维护。

运算符

优先级

后缀

expr++ expr–

一元

++expr --expr +expr -expr ~ !

乘法的

* / %

加性的

+ -

转移

<< >> >>>

关系

< > <= >= instanceof

平等

== !=

按位与

&

按位异或

^

按位或

|

逻辑与

&&

逻辑或

||

三元

? :

任务

= += -= *= /= %= &= ^=

Java作为类C语言,上表中的绝大多数运算符在C/C++中也存在,并且用法也是一致的。作为一份写给C/C++程序员的Java基础教程,我们只介绍那些在C/C++没有的运算符及其作用。

instanceof

运算符将instanceof对象与指定类型进行比较。您可以使用它来测试对象是类的实例、子类的实例还是实现特定接口的类的实例。相当于python中的isinstance函数。下面是官方教程中的例子:

代码语言:javascript
复制
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 {}

程序执行结果如下所示:

代码语言:javascript
复制
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++没有的。

下面是一点测试代码,你执行看看输出。

代码语言:javascript
复制
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官方教程

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 运算符
    • instanceof
      • >>>
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档