黑马程序员技术交流社区

标题: 关于equals的小问题 [打印本页]

作者: hurryup    时间: 2013-11-27 19:06
标题: 关于equals的小问题
本帖最后由 hurryup 于 2013-11-27 21:13 编辑

"字符串".equals(字符窜变量)==>(字符串变量).equals("字符串")吗,为什么?
作者: HAnG    时间: 2013-11-27 19:13
是的,因为字符串也是一个对象。
equals在String类被重写成比较2个对象是否表示相同字符序列。
作者: 王贺    时间: 2013-11-27 19:22
下面是String类的equals():  
public boolean equals(Object anObject)
{ if (this == anObject)
{     return true; }
if (anObject instanceof String)
{     String anotherString = (String)anObject;   
int n = count;   
if (n == anotherString.count)
{  char v1[] = value;  
char v2[] = anotherString.value;
int i = offset;  
int j = anotherString.offset;  
while (n-- != 0)
{      if (v1[i++] != v2[j++])   
return false;  }
return true;     }
} return false;    }
可以看到String类的equals()方法对内容或引用相同返回的结果都是true
我想这段代码对你有帮助
作者: hurryup    时间: 2013-11-27 20:31
其实我是想问这两种写法能不能互换,有什么安全问题?
作者: 衣带赞    时间: 2013-11-27 20:47
当然不能互换了,"字符串".equals(字符窜变量) 这个是绝对安全的,不会存在任何问题。
而 (字符串变量).equals("字符串")就有可能发生NoPointException,你不能保证字符串变量是否为null,所以写成" 字符串".equals(字符窜变量) 这种形式可以避免处理异常,而且又不会影响比较,何乐而不为呢?




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