[size=x-large]Groovy中的true和false[/size]
这里说Groovy的true和false其实不太准确, Groovy中的true和false两个关键字和Java一样都是boolean类型。 这里要说的是Groovy中的条件判断为真和假的情况。在Java中条件判断只能是boolean类型。在java中要宽泛的多:
boolean类型的true和false:
空字符串被判断为false,非空字符串被判断为true:
数值0被判断为false, 非0被判断为true:
空的List和迭代器被判断为false, 否则为true:
空的Map被判断为false,非空Map为true:
空的对象引用为false,非空为true:
匹配的正则表达式为true, 不匹配为false:
这里要特别注意的一点,上面除了boolean类型以外都是“[b]被判断为true和false[/b]”,而不是boolean类型的true和false,也就是说
这里说Groovy的true和false其实不太准确, Groovy中的true和false两个关键字和Java一样都是boolean类型。 这里要说的是Groovy中的条件判断为真和假的情况。在Java中条件判断只能是boolean类型。在java中要宽泛的多:
boolean类型的true和false:
def b1 = false
def b2 = true
assert !b1
assert b2
空字符串被判断为false,非空字符串被判断为true:
def s1 = ''
def s2 = 'abc'
assert !s1
assert s2
数值0被判断为false, 非0被判断为true:
def n1 = 0
def n2 = 42
assert !n1
assert n2
空的List和迭代器被判断为false, 否则为true:
def l1 = []
def l2 = [1, 3, 6]
assert !l1
assert l2
def i1 = l1.iterator()
def i2 = l2.iterator()
assert !i1
assert i2
空的Map被判断为false,非空Map为true:
def m1 = [:]
def m2 = ['key': 'value']
assert !m1
assert m2
空的对象引用为false,非空为true:
def o1
def o2 = new Expando(name: 'groovy')
assert !o1
assert o2
匹配的正则表达式为true, 不匹配为false:
def ma1 = "groovy" =~ /java/
def ma2 = "groovy" =~ /groovy/
assert !ma1
assert ma2
这里要特别注意的一点,上面除了boolean类型以外都是“[b]被判断为true和false[/b]”,而不是boolean类型的true和false,也就是说
assert null == false // 输出false
assert null == true // 输出false