Java语言中的List是我们处理集合时经常会用到的。而List定义了一个contains方法,用以判断一个集合中是否包含指定的一个对象。
大家应该有用到过吧,可是你真的会用,用对了吗?
看看下面的代码。
上图代码中,创建了两个内容相同的String对象:str1和str2,将str1存入了集合list中,。这两个对象不是同一个对象,所以“str1==str2”输出的结果是false。但是通过“list.contains(str2)”判断集合中是否包含str2时,返回的却是true。
是你意料中的吗?
再看看下面的代码。
是把上面的代码中的String换成了一个自定义的类Coder。那执行的结果和第一段代码的执行结果会是一样的吗?
见证一下。
恩?“list.contains(coder2)”返回的结果是false。为什么和集合存放String时不一样了呢。
一起来看看contains方法的源码吧(以ArrayList的实现为例)。
大家注意到了吧,其实contains方法中是使用了equals方法逐一与集合中的元素进行比较来判断集合是否包含指定对象的。
刚才存放自定义类Coder的集合示例代码中使用contains返回false,是因为自定义类Coder没有重写Object的equals方法,而Object的equals只有两个对象是同一个对象才会返回true。
而存放String的集合示例代码中使用contains返回true,是因为String类中重写了Object的equals方法,只要是两个String对象的内容是相同的,就会返回true。
现在是不是清楚了。