黑马程序员技术交流社区

标题: 字符串equals的问题 [打印本页]

作者: 刘云龙    时间: 2013-3-14 21:07
标题: 字符串equals的问题
本帖最后由 猫腻 于 2013-3-14 22:23 编辑

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

作者: 白堇翎    时间: 2013-3-14 21:16
没有区别 equals对比的是 具体的值
username是一个参数 "admin"是一个字符串
当username的值为"admin"时会返回true 这个和比较时的顺序无关 无论谁在前面谁在后面都会返回true这个结果
这样讲你应该明白了吧...

作者: 陈宇鹏    时间: 2013-3-14 21:21
没有区别,equals方法比较的是对象中字符串是否一样。与储存它的容器无关。也就是说,不管你怎么写,它最终比较的都是储存在其中的内容,所以,没有区别
作者: 沉默de羔羊    时间: 2013-3-14 21:24
假如username这个变量不为Null,username.equals("admin")和"admin".equals(username)是没有区别的。

但是,记住要是username变量的值为Null,就会报错!
所以在写程序的时候,尽量把常量字符串放在equals的前面,变量放在后面!
作者: 刘云龙    时间: 2013-3-14 21:28
本帖最后由 刘云龙 于 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");
复制代码

作者: 孙宁    时间: 2013-3-14 21:28
username.equals("admin")在username为null时会出现空指针异常,而"admin".equals(username)不会,其余情况下两者差不多,推荐使用"admin".equals(username)
作者: HM赵磊    时间: 2013-3-14 21:50
有稍微的区别。有如下两点:
一username.equals("admin")是字符串实例username调用equals方法,equals方法的参数是字符串实例admin  。"admin".equals(username)是字符串admin实例调用equals方法,传递的是username字符串
二.还有一个差别。当一个对象调用equals方法时,他的引用不能使空,否则将会跑出NullPointerException<空指针异常>,例如null.equals("HELLO");
但是,一个非空字符串引用调用equals方法传入的参数是null,那么不会抛异常,会返回false,例如 "abc".equals(null);

希望能帮到您
作者: HM刘博    时间: 2013-3-14 22:09
这个是有区别的
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
希望对你能有帮助!!!



作者: wangjinyu501    时间: 2013-3-14 22:23
没有区别,一个是变量,它的值目前还不知道。都是作为一个对象调用方法,要清楚面向对象编程的含义。
作者: 沉默de羔羊    时间: 2013-3-14 23:57
刘云龙 发表于 2013-3-14 21:28
我想你应该联系一下这个例子:
看看下边2个语句是否完全相同:

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

再说了,我运行结果都是true!
作者: 聂斌    时间: 2013-3-15 02:55
username.equals("admin") 如果你的username是null 就会报空指针异常 不推荐使用。

"admin".equals(username)中的"admin"是一个已存在的字符串,一定可以调用equals方法,即使username为null也不会抛异常,,增强了程序的健壮性




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