Groovy语法学习(五)运算符重载 古城微笑少年丶 2022-05-27 05:19 176阅读 0赞 groovy同样具有运算符重载的功能,其实运算符也是调用类中的具体方法,使用运算符看起来更加简洁,容易理解。 简单重载一个减法 class Money{ def number def minus(o){ if(o instanceof Money){ number-=o.number }else if(o instanceof Number){ number-=o } this } @Override public String toString() { return "Money{" + "number=" + number + '}'; } } def m=new Money(number: 100) def b=new Money(number: 50) println m-b println m-30 结果: Money{number=50} Money{number=20} 下面附上操作符重载的表,大家可以自行查看,原博客地址[https://www.cnblogs.com/rollenholt/archive/2013/10/02/3349047.html][https_www.cnblogs.com_rollenholt_archive_2013_10_02_3349047.html] 下面的表格描述了groovy中的操作符所映射到的方法: <table> <tbody> <tr> <td> <p>Operator</p> </td> <td> <p>Method</p> </td> </tr> <tr> <td> <p>a + b</p> </td> <td> <p>a.plus(b)</p> </td> </tr> <tr> <td> <p>a – b</p> </td> <td> <p>a.minus(b)</p> </td> </tr> <tr> <td> <p>a * b</p> </td> <td> <p>a.multiply(b)</p> </td> </tr> <tr> <td> <p>a ** b</p> </td> <td> <p>a.power(b)</p> </td> </tr> <tr> <td> <p>a / b</p> </td> <td> <p>a.div(b)</p> </td> </tr> <tr> <td> <p>a % b</p> </td> <td> <p>a.mod(b)</p> </td> </tr> <tr> <td> <p>a | b</p> </td> <td> <p>a.or(b)</p> </td> </tr> <tr> <td> <p>a & b</p> </td> <td> <p>a.and(b)</p> </td> </tr> <tr> <td> <p>a ^ b</p> </td> <td> <p>a.xor(b)</p> </td> </tr> <tr> <td> <p>a++ or ++a</p> </td> <td> <p>a.next()</p> </td> </tr> <tr> <td> <p>a– or –a</p> </td> <td> <p>a.previous()</p> </td> </tr> <tr> <td> <p>a[b]</p> </td> <td> <p>a.getAt(b)</p> </td> </tr> <tr> <td> <p>a[b] = c</p> </td> <td> <p>a.putAt(b, c)</p> </td> </tr> <tr> <td> <p>a << b</p> </td> <td> <p>a.leftShift(b)</p> </td> </tr> <tr> <td> <p>a >> b</p> </td> <td> <p>a.rightShift(b)</p> </td> </tr> <tr> <td> <p>switch(a) { case(b) : }</p> </td> <td> <p>b.isCase(a)</p> </td> </tr> <tr> <td> <p>~a</p> </td> <td> <p>a.bitwiseNegate()</p> </td> </tr> <tr> <td> <p>-a</p> </td> <td> <p>a.negative()</p> </td> </tr> <tr> <td> <p>+a</p> </td> <td> <p>a.positive()</p> </td> </tr> </tbody> </table> 另外需要注意的是下面的所有的操作符,在遇到null的时候,都不会抛出java.lang.NullPointerException <table> <tbody> <tr> <td> <p>Operator</p> </td> <td> <p>Method</p> </td> </tr> <tr> <td> <p>a == b</p> </td> <td> <p>a.equals(b) or a.compareTo(b) == 0 **</p> </td> </tr> <tr> <td> <p>a != b</p> </td> <td> <p>! a.equals(b)</p> </td> </tr> <tr> <td> <p>a <=> b</p> </td> <td> <p>a.compareTo(b)</p> </td> </tr> <tr> <td> <p>a > b</p> </td> <td> <p>a.compareTo(b) > 0</p> </td> </tr> <tr> <td> <p>a >= b</p> </td> <td> <p>a.compareTo(b) >= 0</p> </td> </tr> <tr> <td> <p>a < b</p> </td> <td> <p>a.compareTo(b) < 0</p> </td> </tr> <tr> <td> <p>a <= b</p> </td> <td> <p>a.compareTo(b) <= 0</p> </td> </tr> </tbody> </table> 需要注意的是,“==”操作符并不总是和equals()方法等价。 比如: def a = null def b = "foo" assert a != b assert b != a assert a == null 无论a或者b谁是null,都不会抛出java.lang.NullPointerException。 另外在不同类型的对象之间比较的时候,强制类型转换规则使用于把数字类型转换为最大的数字类型。所以下面的代码是有效的: Byte a = 12 Double b = 10 assert a instanceof Byte assert b instanceof Double assert a > b [https_www.cnblogs.com_rollenholt_archive_2013_10_02_3349047.html]: https://www.cnblogs.com/rollenholt/archive/2013/10/02/3349047.html
还没有评论,来说两句吧...