欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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
java学习困难重重之泛型篇

但是我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
java学习困难重重之泛型篇
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

相关标签: java学习