java学习困难重重之泛型篇
程序员文章站
2022-10-03 14:33:26
java学习之泛型篇今天晚上学到java之泛型篇,遇到了一个问题,问题描述:在尝试理解泛型类型时做了以下测试: @Test public void testType(){ List stringList = new ArrayList(); List integerList = new ArrayList(); System.ou...
java学习之泛型篇
今天晚上学到java之泛型篇,遇到了一个问题,问题描述:
在尝试理解泛型类型时做了以下测试:
@Test
public void testType(){
List<String> stringList = new ArrayList<String>();
List<Integer> integerList = new ArrayList<Integer>();
System.out.println(stringList.equals(integerList));
Class classStringList = stringList.getClass();
Class classIntegerList = integerList.getClass();
System.out.println(stringList.equals(integerList));
System.out.println(classIntegerList.equals(classStringList));
}
运行结果为 true true true
但是我debug显示指向对象并不一样,所以抱着疑问做了另一个测试。
class Animal<T> {
private T Animal;
public Animal() {
}
public Animal(T animal) {
Animal = animal;
}
public T getAnimal() {
return Animal;
}
public void setAnimal(T animal) {
Animal = animal;
}
}
---------分界线----------
@Test
public void test01(){
Animal<String> stringAnimal = new Animal<String>();
Animal<Integer> integerAnimal = new Animal<Integer>();
System.out.println(stringAnimal.equals(integerAnimal));
Class str = stringAnimal.getClass();
Class integer = integerAnimal.getClass();
System.out.println(str.equals(integer));
System.out.println(stringAnimal.equals(integerAnimal));
}
运行结果却是 false true false
debug结果和想象中一样,运行结果也意料之中的false 。
至此,我个人想法觉得应该和List和ArrayList类内部重写了equals函数有关,遂进入源码分析。
ArrayList的父类AbstractList重写了equals方法,尝试理解一下(有点晚,睡觉,明天再来填坑)
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof List))
return false;
ListIterator<E> e1 = listIterator();
ListIterator<?> e2 = ((List<?>) o).listIterator();
while (e1.hasNext() && e2.hasNext()) {
E o1 = e1.next();
Object o2 = e2.next();
if (!(o1==null ? o2==null : o1.equals(o2)))
return false;
}
return !(e1.hasNext() || e2.hasNext());
}
本文地址:https://blog.csdn.net/qq_38831337/article/details/107678033
下一篇: springboot通用异常处理