前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >12. Groovy 运算符-优先级和运算符重构学习

12. Groovy 运算符-优先级和运算符重构学习

作者头像
zinyan.com
发布2022-12-07 18:28:22
6500
发布2022-12-07 18:28:22
举报
文章被收录于专栏:zinyanzinyan

1. 介绍

本篇为Groovy学习第12篇内容。从第6篇开始学习Groovy中有关运算符的相关知识。而那些知识只是介绍了各种运算符的使用以及注意事项。

而本篇就来学习各种运算符的优先级方面的知识。因为如果多种运算符同时使用时,程序会先执行哪个后执行哪个。这个是开发中很重要的一个知识点。

2. 运算符优先级

下面,通过表格的形式,展现所有Groovy中运算符的优先顺序。顺序是从先到后的。

Level

运算符

解释

1

new ()

对象创建,显式括号

() {} []

方法调用, 闭包操作, List和Map调用

. .& .@

成员访问, 对象获取,方法或属性访问 https://zinyan.com/?p=396

?. * *. *:

安全导航,展开运算符

~ ! (type)

按位取反运算符,逻辑非运算符,以及最后的类型转换

[] ?[] ++ --

列表对象获取,和列表对象安全获取, 累加或累减

2

**

幂运算

3

++ -- + -

基本的算术运算符,累加和累减 (PS:官方也是这样标注的,我觉得应该是前加和后加的区别)

4

* / %

乘,除,取余

5

+ -

加减运算符

6

<< >> >>> .. <..<

左右位移运算符, 无符号位移,区间运算符

7

< <= > >= in !in instanceof !instanceof as

大于等于比较运算符, in 和非in 成员运算符, instanceof和not instanceof, as 类型转换运算符

8

== != <=> === !==

比较运算符,三元比较运算符

=~ ==~

正则表达式操作符

9

&

位运算符:and

10

^

位运算符: xor

11

|

位运算符:or

12

&&

逻辑运算符:逻辑与

13

||

逻辑运算符:逻辑或

14

? :

三元运算符

?:

条件运算符,可以算三元运算符的缩写

15

= **= *= /= %= += -= \<<= >>= >>>= &= ^= |= ?=

其他各种运算符。

再次强调一下:1级是最先执行的,15级是最后执行的。

3. 运算符重载

Groovy允许您重载各种运算符,以便它们可以与您自己的类一起使用。

我在前面的介绍中,也有使用过相关的重载方法。

总而言之,各种运算符其实就是对方法的简写。而所谓的运算符重写。就是将各运算符所代表的方法,进行重载。我们可以重新定义该运算符在使用时的意义。

示例如下所示 我重载了plus方法,这个就是用来进行计算的方法:

代码语言:javascript
复制
class Bucket {
    int size

    Bucket(int size) { this.size = size }

    Bucket plus(Bucket other) {                     
        return new Bucket(this.size + other.size)
    }
}

然后我们再使用该值的计算方法:

代码语言:javascript
复制
def b1 = new Bucket(4)
def b2 = new Bucket(11)
println(b1+b2.size) //输出为15

下面是运算符及其相应方法的完整列表:

运算符

方法

运算符

方法

+

a.plus(b)

a[b]

a.getAt(b)

-

a.minus(b)

a[b] = c

a.putAt(b, c)

*

a.multiply(b)

a in b

b.isCase(a)

/

a.div(b)

<<

a.leftShift(b)

%

a.mod(b)

>>

a.rightShift(b)

**

a.power(b)

>>>

a.rightShiftUnsigned(b)

|

a.or(b)

++

a.next()

&

a.and(b)

--

a.previous()

^

a.xor(b)

+a

a.positive()

as

a.asType(b)

-a

a.negative()

a()

a.call()

~a

a.bitwiseNegate()

我们可以根据自己的实际需求,进行自定义类后重载相关方法。那么在该类使用运算符的时候,计算逻辑就会按照我们定义的方法进行了。

如果不能理解。那么就多修改几个方法试试吧。

这种特性在新出的一些高级语言中可以说都是存在的。例如python 和Kotlin等语言中,也有类似的重载机制。

4. 小结

本篇,可以说是针对运算符的各种符号的一个归纳介绍。 如果对某个运算符不了解的话,建议看我分享的运算符详细知识。

到这里,有关运算符的相关知识就分享结束了。在学习这些运算符的同时,我们对于Groovy的语言的特性也在不断的了解中。

本篇内容知识来源于Groovy官网文档:http://docs.groovy-lang.org/docs/groovy-4.0.6/html/documentation/#_operator_precedence

从下一篇开始,介绍Groovy的语言结构。也就是语法和代码结构的相关知识点。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 zinyan 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 介绍
  • 2. 运算符优先级
  • 3. 运算符重载
  • 4. 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档