1. == 是判断是否 equals, 而判断是否是同一对象则用 is
2. list 和 map 的一些方法:
def x = 1..10
assert x.contains(5)
assert x.contains(15) == false
assert x.size() == 10
assert x.from == 1
assert x.to == 10
assert x.reverse() == 10..1
3. 以下对象都有 size() 方法
Array, String, StringBuffer, Collection, Map, File
4. 数据类型:12 – Integer, 100L – Long, 1.23F – Float, 1.23D – Double, 123G – BigInteger, 1.23,1.23G – BigDecimal
如果一个小数, 末尾什么字符都没加, 那么这个小数使用的是 BigDecimal.
5. 操作符重载
Operator |
Name |
Method |
Works with |
a + b |
Plus |
a.plus(b) |
Number,string,collection |
a – b |
Minus |
a.minus(b) |
Number,string,collection |
a * b |
Star |
a.multiply(b) |
Number,string,collection |
a / b |
Divide |
a.div(b) |
Number |
a % b |
Modulo |
a.mod(b) |
Integral number |
a++ |
Post increment |
a.next()
|
Number,string,range
|
++a |
Pre increment |
||
a– |
Post decrement |
a.previous()
|
Number,string,range
|
–a |
Pre decrement |
||
a**b |
Power |
a.power(b) |
Number |
a | b |
Numerical or |
a.or(b) |
Integral number |
a & b |
Numerical and |
a.and(b) |
Integral number |
a ^ b |
Numerical xor |
a.xor(b) |
Integral number |
~a |
Bitwise complement |
a.negate() |
Integral number,string (the latter returning a regular expression pattern) |
a[b] |
Subscript |
a.getAt(b) |
Object,list,map,string、Array |
a[b] = c |
Subscript assignment |
a.puAt(b,c) |
Object,list,map,StringBuffer, Array |
a << b |
Left shift |
a.leftShift(b) |
Object, range, list, collection, pattern, closure; also used with collection c in c.grep(b), which returns all items of c where b.isCase(item) |
a == b |
Equals |
a.equals(b) |
Object, consider hashCode() |
a != b |
Not equals |
!a.equals(b) |
Object |
a <=> b |
Spaceship |
a.compareTo(b) |
java.lang.Comparable Any type |
a > b |
Greater than |
a.compareTo(b) > 0 |
|
a >= b |
Greater than or equal to |
a.compareTo(b) >= 0 |
|
a < b |
Less than |
a.compareTo(b) < 0 |
|
a <= b |
Less than or equal to |
a.compareTo(b) <= 0 |
|
a as type |
Enforced coercion |
a.asType(typeClass) |
|
a <=> b |
Spaceship |
a.compareTo(b) |
java.lang.Comparable |
class Money {
private int amount
private String currency
Money (amountValue, currencyValue) {
amount = amountValue
currency = currencyValue
}
boolean equals (Object other) {
if (null == other) return false
if (! (other instanceof Money)) return false
if (currency != other.currency) return false
if (amount != other.amount) return false
return true
}
int hashCode() {
amount.hashCode() + currency.hashCode()
}
Money plus (Money other) {
if (null == other) return null
if (other.currency != currency) {
throw new IllegalArgumentException("cannot add $other.currency to $currency")
}
return new Money(amount + other.amount, currency)
}
}
def buck = new Money(1, 'USD')
d Use overridden ==
assert buck
assert buck == new Money(1, 'USD')
e Use overridden +
assert buck + buck == new Money(2, 'USD')