A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马上都有 中级黑马   /  2014-4-16 23:00  /  925 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

name.equals("lisi") 跟 "lisi".equals(name)。这两者的区别具体体现在什么地方?
大神们麻烦给个详细点的解答

3 个回复

倒序浏览
很简单,如果你name.equals("lisi") 这句上面获取到的name的值为null的话,就会报空指针异常,因为字符串也是对象,所以也有equals方法,所以也可以调用,“lisi”.equals(null)是不会报异常的,只会返回false
回复 使用道具 举报
本帖最后由 左拉 于 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字符串变量,安全啊!

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
name 是String类型
  1,当你的name不为null
       两者的返回结果是一样的   如果把name放在前面,是name这个字符串调用自己的equals方法,反过来就是“lisi”调用自己的equals方法
  2,当你的name如果为null
        “lisi”调用equals方法是跟null比较,不会发生NullPointException ,如果是name调用,则是null去调用equals方法,肯定会包NullPointException
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马