一个ArrayList的初始化方法,这里面的elementData.getClass() != Object[].class 为什么可以使用不等于?具体比较了什么?
public ArrayList(Collection<? extends E> c) {
elementData = c.toArray(); //将集合中的元素设置到这个数组里
if ((size = elementData.length) != 0) {
// c.toArray might (incorrectly) not return Object[] (see 6260652) 这个数组的返回类型也可能不是Object[]
if (elementData.getClass() != Object[].class) //如果集合元素个数不等于零,并且这个数组的类型不是Object[],那么将他转化成Object[]
elementData = Arrays.copyOf(elementData, size, Object[].class);
} else {
// replace with empty array.
this.elementData = EMPTY_ELEMENTDATA; //否则,置为空
}
}
所有的Class对象都是单例的,所以可以直接比较,比较的是地址,就和枚举可以直接比较一样的;
因为是单例,所以如果是同一个Class对象,那么地址一定相同。
希望对你有帮助...
A.class 和 A的实例.getClass() 拿到的都是A的类型类
比较的就是两者是不是同一个类型