1. 前言
本篇是Groovy学习第6篇内容。前面学习了Groovy的语法,现在学习相关运算符知识。
内容比较多,将会分为多篇进行分享。让我们先从最基础的开始吧。
def关键字,代表动态变量。可以理解为java中的object对象。
2. 算术运算符-Arithmetic operators
Groovy支持编程语言中常见的算术运算符。支持所有Java算术运算符。
例如普通的 ,-,*,/ 运算。
- 加法运算:addition 标识符为:
- 减法运算:subtraction 标识符为:
- - 乘法运算:multiplication 标识符为:
* - 除法运算:division 标识符为:
/ - 取余运算:remainder 标识符为:
% - 幂运算:power 标识符为:
**
常见示例如下所示:
代码语言:javascript复制def ad = 1 2 //结果为3
def sub = 4 - 3 //结果为1
def mult = 3 * 5 //结果值为 15
def divi = 3 / 2 //结果值为 1.5
def rema = 10 % 3 //结果值为 1
def powe = 2 ** 3 //结果值为 8其中加减乘除比价好理解。就是后面的取余计算和幂运算需要简单介绍一下。
取余计算,就是将除法除不尽的余数进行返回,该返回值永远大于等于0。例如上面示例中10/3 最多取3,余剩下的1无法被除尽。所以结果为1。
幂运算,例如上面的示例就是2^3^ 。右边跟着的值是幂值。计算结果就是:2*2*2所以结果值为8了。
2.1 一元运算符
在Groovy中, 和- 算为一元运算符。我们常见的使用方法为: (增量)和--(减量)运算符。同时能够将它和其他运算符混合使用。
示例效果如下所示:
代码语言:javascript复制def a = 2
def b = a * 3
println(b) //输出的结果是6
println(a) //输出的结果是3
b = a * 3
println(b) //输出的结果是12减法也可以按照这种逻辑进行计算。
代码语言:javascript复制def c = 3
def d = c-- * 2
println(d) //输出结果为6
println(c) //输出结果为2这其中有个前 和后 之间的区别。这个差异和java中的是一样的。
前 例如, a 就代表先对a做 1操作,然后再将a的结果值用于后面的计算。
后 例如,a 就代表先返回a,将a用于表达式中的计算,然后再对a做 1操作。
--运算符的前后差异也是这样的规则,只是它执行的是a-1操作而已。
那么我们如果是在加法运算中, 是会先执行还是后执行呢?示例如下:
代码语言:javascript复制//前
def e = 1
def f = e 3
println(e) //输出2
println(f) //输出5
//后
e = 1
f = e 3
println(e) //输出2
println(f) //输出4可以看到, 的运算优先级最高。会先执行然后再执行其他的运算。
2.2 赋值算术运算符
上面的一元运算符中的 和-- 起始也算是赋值运算符的一种。因为它计算之后的结果是赋值给了源数据。
但是由于 和--是固定每次只会 1或者-1。我们如果想加更多或者减更多,也有简单的运算符进行操作:
=:加运算赋值。 ( 就是这个运算符 a =1 的更简写法)-=:减运算赋值。 (-- 就是这个运算符 a-=1 的更简写法)*=:乘法运算赋值。/=:除法运算赋值。%=:取余运算赋值。**=:幂运算赋值。
效果示例如下:
代码语言:javascript复制def a = 4
a = 3
println(a) //输出 7
def b = 5
b -= 3
println(b) //输出 2
def c = 5
c *= 3
println(c) //输出 15
def d = 10
d /= 2
println(d) //输出 5
def e = 10
e %= 3
println(e) //输出 1
def f = 3
f **= 2
println(f) //输出 9这些赋值运算只是一个方便我们节省代码的写法。如果你不喜欢也可以单纯使用算术运算符拼接进行书写。
如果表达式中加减乘除都拥有,那么计算顺序和数学中的公式计算是一样的优先级,从左往右先乘除后加减进行。
3. 关系运算符-Relational ioerators
关系运算符允许在对象之间进行比较,以了解两个对象是相同还是不同,或者一个大于、小于或等于另一个。
运算符 | 用途 |
|---|---|
== | 等于比较,左右两边进行比较相等返回true,不等返回false。 |
!= | 不等于比较,比较左右两边否不相等。不相等返回true,相等返回false。 |
< | 小于比较,左边小于右边返回true,大于等于右边返回false。 |
<= | 小于等于比较,左边小于或者等于右边返回true,否则返回false。 |
> | 大于比较,左边大于右边返回true,小于或等于右边返回false。 |
>= | 大于等于比较,左边大于或者等于右边返回true,否则返回false。 |
=== | 相同比较,左右两边相同返回true,不同返回false(版本Groovy 3.0.0才开始支持) |
!== | 不相同比较, 左右两边不相同返回true,相同返回false(版本Groovy 3.0.0才开始支持) |
下面进行简单的代码示例展示:
代码语言:javascript复制println(1 2==3) //返回true
println(3 != 4) //返回 true
println(-2 < 3) //返回true
println(2 <= 2) //返回true
println(3 <= 4) //返回true
println(5 > 1) //返回true
println(5 >= -2) //返回true==是使用equals()进行的比较,而=== 使用的是is()进行的比较判断。 该运算符需要Groovy 3.0 SDK支持否则会出现错误。
@EqualsAndHashCode
class Zinyan {
String type
def static main(def args) {
def zin = new Zinyan(type: 'zinyan')
def yan = new Zinyan(type: 'zinyan')
//比较zin 和yan 两个值是相同的 。因为我自定的类添加了EqualsAndHashCode 比较参数的HashCode值
println(zin.equals(yan)) //返回 true
println(zin == yan) //返回 true
//我们如果直接进行相同判断
println(zin === yan) //返回false 因为这两个对象不同(内存空间地址不同)
def copyZin = zin //当我们直接复制
println(zin.is(copyZin)) //返回结果为true。相同了
println(zin === copyZin) //返回结果true。
}
}PS: 如果你的编译运行中有is方法,而没有
===方法那说明你的groovy SDK版本 比较低了。
4. 逻辑运算符-Logical operators
Groovy为布尔表达式提供了三个逻辑运算符:
&&: 逻辑与,参照单词中的"and"||: 逻辑或,参照单词中的"or"!: 逻辑非,参照单词中的"not"
示例说明如下:
代码语言:javascript复制def a = false
def b = true
println( !a ) //返回结果true。
println( !b ) //返回结果false。
println( a && b ) //返回结果为false。
println( a || b ) //返回结果为true。逻辑很简单,我就不做详细介绍了。所有编程语言中的逻辑运算符都是一样的。
我们要注意的地方在于,相同表达式中逻辑非!的运算优先级要高于逻辑与&&。例如:
println(!false && false) //返回的结果为false。 因为先进行了非运算。而相同情况时,逻辑与&&是要高于逻辑或||的优先级的。示例如下:
println(true || true && false ) //返回结果为true,因为先进行了与运算。逻辑||运算符支持短路:如果左操作数为真,则它知道结果在任何情况下都为真,因此不会计算右操作数。仅当左操作数为假时,才会计算右操作数。
同样对于逻辑&&运算符:如果左操作数为假,则它知道结果在任何情况下都将为假,因此不会计算右操作数。仅当左操作数为真时,才会计算右操作数。
这种处理逻辑叫做短路Short-circuiting。
5. 小结
本篇内容到这里就结束了,相关资料可以通过Groovy官网文档进行了解:http://docs.groovy-lang.org/docs/groovy-4.0.6/html/documentation/#groovy-operators
本篇内容是我学习官网文档的一些笔记内容。
介绍了基础的算术运算,关系运算和逻辑运算。下一篇将会继续分享运算符知识,例如位运算,条件运算,对象运算符等等。


