java中的arraylist中的contains源码

public boolean contains(Object o) {
return indexOf(o) >= 0;
}
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i] ==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i] ))
return i;
}
return -1;

这是ArrayList中 contains 源码 我想问下 那个 if(o==null)是啥意思

在实际操作是干啥的
contains(O)传值时O如果是null的话会报错的

String str = null;
String str1= "a";
System.out.println(str1.contains(str));

判断字符串中是否有"null";


String str;
String str1= "a";
System.out.println(str1.contains(str));

编译不会通过.

源码是上边的那种意思

这段代码很好理解啊。
如果o为null,那么就去找elementData[] 是否有为null的对象,有则返回下标没有则返回-1。
如果o不为null,就通过equals去比较elementData[] 中是否有与o相同的对象,有则返回下标没有则返回-1。
这里判断 o==null 主要就用来确定是否要使用 o.equals(),防止出现NPE。
因为ArrayList 是可以放入null的,所以不能 elementData[i].equals(o) 。

另外对于你说的 “contains(O)传值时O如果是null的话会报错的”不知是什么错?我试了下没得问题。
图片说明

参数:
o - 要测试列表中是否存在的元素
返回:
如果列表包含指定的元素,则返回 true
抛出:
ClassCastException -
如果指定元素的类型和此列表不兼容(可选)
NullPointerException

  • 如果指定的元素为 null,并且此列表不允许 null 元素(可选)

这是API的解释
简单点就是:判断集合中是否包含了括号中的元素,如果有就返回true,没有返回false