contains源代码如下所示
contains源代码分析
/* publicbooleancontains (objecto ) /首先由name传递给contains方法的参数。 也就是说,o指的是name所指的对象,name对象是上传型对象
returnindexof(o )=0; //调用以下indexOf方法
}
publicintindexOf(Objecto ) indexOf方法的o指向contains方法的o的对象,即indexOf方法的o实质上指向name对象
if(o==null(//o不为空,因此o==null为false,跳转到else的部分
for(intI=0; i size; I )
if(elementdata[I]==null () ) ) ) )。
return i;
} else {
for(intI=0; i size; //for循环遍历nameList的各个元素; 其中size是全局变量,this是省略的。 实际上是this.size,nameList调用了contains方法。 因此,this指的是nameList,而this.size指的是nameList中元素的数量。
将if(o.equals(elementdata[I] )/o所指向的对象name与通过nameList遍历的各个元素进行比较,比较规则为equals方法、o.equals ) element data o是o
return i; 因为是//if(true ),所以返回I,跳转到contains方法。 在方法主体中,returnindexOf(o(o )为0,indexof ) o )返回I,i=0为true,因此返回true。
}
返回- 1;
) /
还有第二种情况
/* publicbooleancontains (objecto ) /首先由name传递给contains方法的参数。 也就是说,o指的是name所指的对象,name对象是上传型对象
returnindexof(o )=0; //调用以下indexOf方法
}
publicintindexOf(Objecto ) indexOf方法的o指向contains方法的o的对象,即indexOf方法的o实质上指向name对象
if(o==null(//o为空,所以o==null为true,执行if的内容
for(intI=0; i size; //for循环遍历nameList的各个元素; 在此,size是全局变量,实质上是this.size,即nameList的要素数
if(elementData[i]==null(/o指向的对象与nameList遍历的每个元素进行比较,因为比较规则elementData[i]==null,所以element data
return i; //退出此方法并将I返回给contains方法。 在方法主体中,returnindexof(o )=0,i=0为true,因此返回true
} else {
for(intI=0; i size; I )
if(o.equals(elementdata[I] ) )
return i;
}
返回- 1; //退出此方法,从-1返回contains方法,在方法主体中返回false,因为returnindexof(o )=0,i=0
) /
情况3
contains源代码分析
/* publicbooleancontains (objecto )test首先传递给contains方法的参数。 也就是说,o指的是test所指向的客体,test客体是上传型客体
returnindexof(o )=0; //调用以下indexOf方法
}
publicintindexOf(Objecto ) indexOf方法的o实质上指向contains方法的o所指向的对象,即indexOf方法的o实质上指向test对象
因为if(o==null(//o不为null ),所以o==null为false,不执行if的内容而跳转到else的部分
for(intI=0; i size; I )
if(elementdata[I]==null () ) ) ) )。
return i;
} else {
for(intI=0; i size; //for循环遍历nameList的各个元素; 在此,size是全局变量,实质上是this.size,即nameList的要素数
元素数据[ I ] (if )/o指向的对象将与遍历nameList的每个元素进行比较,并与规则o.equals (元素数据[ I ] )进行比较。 因为o指向test变量的地址,所以在运行时指向test进行比较的是地址,因为地址不同,所以为false,该if语句不执行。 跳到最后。 如果改写了equals方法,则调用改写了Test类的方法。 其中equals参数是集合中的元素(多态性)
return i;
}
返回- 1; 返回//-1。 如果返回contains方法,则最终结果为false,因为-1=0且为false
) /