java集合类的问题

这个程序第8行和第13行的name对象为什么不相等?因为是自定义的类吗?还有29行这里,老师说如果传入的对象(obj)是name类就强制转换为name类?这句话怎么理解?

remove是根据每个对象生成的hashcode和equals方法来判断的。

new对象的时候,就在堆里新开辟了空间存储这个对象。每个对象生成的hashcode都不一样。
想要属性一样就被删除的话,需要重写hashcode()和equals().

java里所有的类都是Object的子类,都默认继承了Object类。存在继承关系,所有父类所在的地方,子类都能够替换父类继续运行。比如说 父亲有一辆车,儿子继承了父亲,那么父亲所有非私有的东西儿子都可以用,这个时候,要求 父亲开车去哪哪,但是实际上 父亲开车去和儿子开车去的结果是一样的,他们都可以开着那个车去。
所以说在这里,声明是Object类,但是实际上传什么类都是可以的,因为所有类都是Object的子类。追问

有的书上的程序重写equals方法直接return true,为什么这个程序要写那么多?

追答

比如我们判断String是否相等,能够直接使用euqals()进行判断,是因为String类里重写的equals()

public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String) anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                            return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

当你想按照自己的想法判断 自定义的类是否相等,就必须重写equals().

你看的什么书?有的书上是为了说明一些例子,直接返回true,这样无论对象是什么,肯定都相等。

追问

看的是王薇的Java程序设计与实践教程,我还有一个疑问,重写的equals方法传入的obj对象是哪一个对象?

温馨提示:答案为网友推荐,仅供参考
相似回答