关于equals和==
来源:4-4 链表的遍历,查询和修改
凌子祺
2020-02-24
老师我想问下,在这里
您用的啥 cur.e.equals(e)
这里的e是我们传入的任意object。所以您用的是equals,比较他们在内存中的地址是否一样的对吗。
但是我想问比如我新建Integer类型的单项链表,举个例子1->2->3->4->5.
我想判断这个链表是否包含数字3,如果按照您的代码里的方法进行比对,数字3是一个常数,应该不会是和链表里的3同样内存地址。这种情况要怎么办呢。
写回答
2回答
-
@qq_慕斯卡9351403 回答的完全正确。
如果你的链表存储的元素类型是 Integer,传入 int,int 会转化成包装类 Integer 用 equals 进行比较,这本身就是包装类的意义。
此时 equals 比较的不是地址,而是值,这是因为 Integer 自己有自己定义的 equals,这也是使用 equals 这个函数,而不是使用 == 的意义。因为 equals 是一个函数,所以各个类可以根据自己的定义,去覆盖这个函数,表达自己的类中,什么叫 equals。而在我们的链表类中,只需要调用这个定义就好了。
继续加油!:)
012020-02-27 -
qq_慕斯卡9351403
2020-02-24
你新建的Integer是基本类型int的包装类,他继承了Object类,也重写了Object的equals方法,只要你传入的是基本类型的包装类而不是基本类型,用equals是没有问题的,如果你传入的是自己封装的对象那就要重写equals方法和hashcode方法(强调一点Object的equals方法如果不重写就是==)
10
相似问题