Groovy中空字符串是否与null等价?如何初始化空字符串?
关于Groovy中空字符串与null的那些事儿
嘿,这个问题我太熟了,好多刚上手Groovy的朋友都会被它的宽松真值判断搞混,我来给你掰扯明白~
首先明确说:Groovy里完全存在空且非null的字符串,而且string = ''和string = null根本不等价!你之前的误解大概率是因为Groovy的布尔上下文判断——空字符串、null、空集合这些在if (!xxx)这类场景里都会被视为false,但这可不代表它们是同一个东西。
核心区别看这里
Groovy里的==其实是调用对象的equals()方法,而===才是判断引用是否完全相同。我们用代码验证下:
def emptyString = '' def nullString = null // 用==比较:空字符串和null不相等 println emptyString == null // 输出 false // 用===比较:引用完全不同 println emptyString === null // 输出 false // 空字符串有自己的isEmpty()方法 println emptyString.isEmpty() // 输出 true
怎么初始化空字符串并存进数组?
太简单了,直接用''或者""定义就行,放进数组里完全没问题,比如:
// 初始化包含空字符串的数组 def myArray = ['', 'Groovy', 'Hello', null] // 验证每个元素 println myArray[0] == '' // true,第一个元素是空字符串 println myArray[3] == null // true,第四个元素是null println myArray.size() // 4,四个元素都被正确存储
为啥会觉得它们等价?
大概率是你在做布尔判断的时候遇到的,比如:
def str1 = '' def str2 = null if (!str1) { println "str1被视为false" // 会执行 } if (!str2) { println "str2被视为false" // 也会执行 }
这是Groovy的语法糖,方便我们快速处理“空值”场景,但这不代表''和null是一回事——一个是长度为0的String对象,另一个是没有任何对象的空引用,本质完全不同。
所以放心大胆地用''定义空字符串存数组吧,完全符合需求,也不会和null混淆~
内容的提问来源于stack exchange,提问作者Deric Plummer
相关产品推荐
相关产品推荐

