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
本篇内容是我学习官网文档的一些笔记内容。
介绍了基础的算术运算,关系运算和逻辑运算。下一篇将会继续分享运算符知识,例如位运算,条件运算,对象运算符等等。