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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘云龙 中级黑马   /  2013-3-14 21:07  /  2975 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 猫腻 于 2013-3-14 22:23 编辑

在使用equals方法的时候,如下(username是一个参数)
username.equals("admin")"admin".equals(username)有区别吗?

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

10 个回复

正序浏览
username.equals("admin") 如果你的username是null 就会报空指针异常 不推荐使用。

"admin".equals(username)中的"admin"是一个已存在的字符串,一定可以调用equals方法,即使username为null也不会抛异常,,增强了程序的健壮性
回复 使用道具 举报
刘云龙 发表于 2013-3-14 21:28
我想你应该联系一下这个例子:
看看下边2个语句是否完全相同:

equals是比较的对象的内容,他们所在堆的内容是相等的啊!

再说了,我运行结果都是true!
回复 使用道具 举报
没有区别,一个是变量,它的值目前还不知道。都是作为一个对象调用方法,要清楚面向对象编程的含义。
回复 使用道具 举报
这个是有区别的
equals是对变量或常量的值进行比较。比的是内容。
==比的是2个变量或常量的地址值。
比如:
String s1,s2,s3 = "abc", s4 ="abc" ;
s1 = new String("abc");
s2 = new String("abc");
那么:
s1==s2 是 false //两个变量的内存地址不一样,也就是说它们指向的对象不 一样,
故不相等。
s1.equals(s2) 是 true //两个变量的所包含的内容是abc,故相等。
另外:
StringAc s1 = new StringAc("a");
StringAc s2 = new StringAc("a");
结果: s1.equals(s2) //是false
解释:StringAc类中没有重新定义equals这个方法,因此这个方法就来自Object类,
而Object类中的equals方法是用来比较“地址”的,所以等于false.
对于这个问题,告诉你一个网址,这是一个网友在博客里总结的,很好,很全面:
http://ljchzzu.iteye.com/blog/700935
希望对你能有帮助!!!


评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
有稍微的区别。有如下两点:
一username.equals("admin")是字符串实例username调用equals方法,equals方法的参数是字符串实例admin  。"admin".equals(username)是字符串admin实例调用equals方法,传递的是username字符串
二.还有一个差别。当一个对象调用equals方法时,他的引用不能使空,否则将会跑出NullPointerException<空指针异常>,例如null.equals("HELLO");
但是,一个非空字符串引用调用equals方法传入的参数是null,那么不会抛异常,会返回false,例如 "abc".equals(null);

希望能帮到您

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
username.equals("admin")在username为null时会出现空指针异常,而"admin".equals(username)不会,其余情况下两者差不多,推荐使用"admin".equals(username)
回复 使用道具 举报
本帖最后由 刘云龙 于 2013-3-14 21:30 编辑
沉默de羔羊 发表于 2013-3-14 21:24
假如username这个变量不为Null,username.equals("admin")和"admin".equals(username)是没有区别的。

但是 ...

我想你应该联系一下这个例子:
看看下边2个语句是否完全相同:
  1. String s = "HelloWorld";

  2. String s = new String("HelloWorld");
复制代码
回复 使用道具 举报
假如username这个变量不为Null,username.equals("admin")和"admin".equals(username)是没有区别的。

但是,记住要是username变量的值为Null,就会报错!
所以在写程序的时候,尽量把常量字符串放在equals的前面,变量放在后面!

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
陈宇鹏 来自手机 中级黑马 2013-3-14 21:21:29
藤椅
没有区别,equals方法比较的是对象中字符串是否一样。与储存它的容器无关。也就是说,不管你怎么写,它最终比较的都是储存在其中的内容,所以,没有区别来自: Android客户端

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
没有区别 equals对比的是 具体的值
username是一个参数 "admin"是一个字符串
当username的值为"admin"时会返回true 这个和比较时的顺序无关 无论谁在前面谁在后面都会返回true这个结果
这样讲你应该明白了吧...

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马