Groovy Tip 1 ==、equals及其他

                                  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 (),系统永远为它生成新的对象。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值