加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Groovy Tip 1 ==、equals及其他

发布时间:2020-12-14 17:00:37 所属栏目:大数据 来源:网络整理
导读:????????????????????????????????? Groovy Tip 1 ==、equals及其他 ? 我们说基于Groovy语言的Java项目开发是一个敏捷的开发,除了我们使用Grails作为Web开发平台,Groovy语言本身就提供了很多敏捷的地方。 我们知道,在Java语言中,判断两个字符串的值是否
????????????????????????????????? Groovy Tip 1 ==、equals及其他
?
我们说基于Groovy语言的Java项目开发是一个敏捷的开发,除了我们使用Grails作为Web开发平台,Groovy语言本身就提供了很多敏捷的地方。
我们知道,在Java语言中,判断两个字符串的值是否相等,我们使用equals方法,而“==”作为判断两个对象引用是否相同的符号。事实证明,我们使用equals方法多过使用“==”符号,特别是在字符串的使用中。
在实际编码的过程中,形如:
??? ? if (abc1.equals(abc2))
??? ?{
?????? ? ……
??? ?}
这样的if语言特别多,但是我们每一次都得拼写equals方法,而不是简单的使用“==”符号。虽然Eclipse等IDE能够帮我们把equals方法拼写完整,但使用equals方法毕竟耽误了我们的时间,远远没有使用“==”符号敏捷。
Groovy语言考虑到了我们的这个实际的需求,果断的使用“==”符号代替了equals方法,来提供Groovy语言编程的敏捷性。
??? ? def abc1 = 'abc'
??? ? def abc2 = "abc"
? println abc1 == abc2
打印的结果为 true
这样,我们就不必再 if (abc1.equals(abc2)) 了,而可以直接使用:
if (abc1==abc2)
??? {
?????? ? ……
??? }
是不是方便了很多?
甚至判断 Collection 两个对象的内容是否相同也可以使用“ == ”符号,如:
??? ? def list1 = [ 1 ]
??? ? def list2 = [ 1 ]
??? ?
? println list1 == list2
你可以把上面的语句运行看看,结果为 true
两个 Map 对象的内容是否相同也可以使用“ == ”符号判断,如:
??? ? def map1 = [ 'name' : 'tom' ]
??? ? def map2 = [ 'name' : 'tom' ]
??? ?
? println map1 == map2
结果为 true 。但是你要运行下面的语句:
??? ? def map1 = [ 'name' : 'tom' ]
??? ?
??? ?
??? ? def map3 = [ 'name' : 'alice' ]
??? ?
? println map1 == map3
结果却是 false 了,原因很简单: map1 map2 key 为“ name ”时, value 却不同。
你可能要问,既然“ == ”符号是判断两个对象的内容是否相同,那么用什么来判断两个对象的引用是否相同呢?
其实很简单,在 Groovy 语言中,我们使用 is 方法来判断两个对象的引用是否相同。如:
??? ? def list1 = [ 1 ]
??? ? def list2 = [ 1 ]
???
? println list1.is(list2)
?
你可能想象得到,上面的语句运行结果为 false
但是,如果是下面的语句:
??? ? def list1 = [ 1 ]
??? ? def list2 = [ 1 ]
??? ?
??? ?list2 = list1
???
? println list1.is(list2)
?
聪明的你一定知道,运行结果为 true
但是你看看下面的语句:
??? ? def abc1 = 'abc'
??? ? def abc2 = "abc"
??? ????
? println abc1.is(abc2)
?
猜猜它的运行结果是什么?
是的,结果为 true
Stop! 你刚刚不是说了,判断两个对象的引用是否相同使用“ == ”符号啊,现在 abc1 abc2 是两个引用啊。
不错, abc1 abc2 是两个引用,但是是两个相同的引用,都指向同一个对象“ abc ”。在声明 def abc1 = 'abc'时,系统会生成一个 abc ”对象,同时将引用 abc1 指向该对象;但是,在声明 def abc2 = "abc"时,系统不再生成新的 abc ”对象,而是直接将引用 abc2 指向上面已经生成了的“ abc ”对象。所以 abc1 abc2 指向同一个对象。
如果你还没有想清楚,请结合下面的例子再想一想:
??? ?String a1 = new String( 'a' )
??? ?String a2 = "a"
??? ?
? println a1.is(a2)
是的,结果为 false
对于 new String (),系统永远为它生成新的对象。
?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读