elementData.getClass() != Object[].class 为什么可以使用不等于?具体比较了什么?

一个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的类型类
比较的就是两者是不是同一个类型