黑马程序员技术交流社区

标题: name.equals("lisi") 跟 "lisi".equals(name) [打印本页]

作者: 马上都有    时间: 2014-4-16 23:00
标题: name.equals("lisi") 跟 "lisi".equals(name)
name.equals("lisi") 跟 "lisi".equals(name)。这两者的区别具体体现在什么地方?
大神们麻烦给个详细点的解答

作者: 月光海    时间: 2014-4-16 23:10
很简单,如果你name.equals("lisi") 这句上面获取到的name的值为null的话,就会报空指针异常,因为字符串也是对象,所以也有equals方法,所以也可以调用,“lisi”.equals(null)是不会报异常的,只会返回false
作者: 左拉    时间: 2014-4-17 15:55
本帖最后由 左拉 于 2014-4-18 15:20 编辑

API中强调,a.equals(b)与b.euqals(a)的返回值应该是一样的,所以从作用来讲是无分别的。
但是把已知的字符串去equals变量安全一些。
考虑以下情况:
   如果String b=null;那么只要a!=null;
   a.equals(b)永远是false.(如果a="";也是false,因为“”表示空字符,至少有地址,null表示什么也不存在)
   反过来,b=null,然后null.equals(a)就会抛出NullPointerException(空指针异常)。
所以,为了安全起见,建议把已知的字符串去equals字符串变量,安全啊!

作者: ⒈心只霸占沵    时间: 2014-4-17 16:03
name 是String类型
  1,当你的name不为null
       两者的返回结果是一样的   如果把name放在前面,是name这个字符串调用自己的equals方法,反过来就是“lisi”调用自己的equals方法
  2,当你的name如果为null
        “lisi”调用equals方法是跟null比较,不会发生NullPointException ,如果是name调用,则是null去调用equals方法,肯定会包NullPointException




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2