这里对Groovy中常见的操作符进行介绍
操作符用法
算术操作符
同Java一样,在算术操作符方面Groovy并无二致。示例代码如下所示
1 | class OperatorDemo { |
关系运算符
Groovy的关系运算符示例如下所示
1 | class OperatorDemo { |
逻辑运算符
Groovy在逻辑运算符支持常见的与、或、非,同时具备短路求值的特点
1 | class OperatorDemo { |
位运算
Groovy与Java一样,同样支持位运算。示例如下所示
1 | class OperatorDemo { |
条件运算符
Groovy不仅提供了传统的三元运算符。还特别提供了Elvis运算符、Elvis赋值运算符。对于前者而言,如果Elvis运算符左边的操作数判定为真,则返回左边操作数; 否则返回右边的操作数;对于后者而言,Elvis赋值运算符, 其是对Elvis运算符的进一步简化, 省去了再次赋值操作。示例如下所示
1 | class OperatorDemo { |
正则操作符
特别地,Groovy针对正则操作提供了相应的操作符。示例如下所示
1 | class OperatorDemo { |
对象操作符
Groovy对于对象引用提供了丰富的操作符。需要特别提醒的是,在Java中对两个对象引用使用==操作符比较的是两个对象的地址是否一样;而在Groovy中==操作符用于比较两个对象的内容是否一样,事实上该操作符是通过equals方法实现的。当然Groovy自然也是支持比较两个对象的地址,其提供了===操作符。事实上该操作符是通过is方法实现的。示例代码如下所示
1 | class OperatorDemo { |
其它
Groovy中其它部分常见的操作符,示例如下所示
1 | class OperatorDemo { |
操作符重载
在Groovy中,部分操作符是有对应的方法。换言之,通过操作符或方法调用在本质上效果是一致的。但操作符一旦有对应的方法,就为我们提供了另外一种编程方式,即进行操作符的重载。在特殊场景下,操作符的重载可以大大方便我们的使用。比如期望通过乘法符号计算两个矩阵的乘积,在Java中这显然是不可能。因为我们不能自定义乘法操作符的具体逻辑,而在Groovy中则可以在我们自定义的矩阵类中通过重载乘法操作符实现。这里给出Groovy可以进行重载的操作符及对应的方法名
下面给出一个进行重载操作符的示例,方便理解、使用
1 | class OperatorOverLoad { |
参考文献
- Groovy In Action · 2nd Edition Dierk König、Guillaume Laforge著