轩辕Shi
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Tool01 tool01 = (Tool01) o;
    return a == tool01.a &&
            b == tool01.b;
}有没有人帮忙解释一下这个方法,没怎么听懂。

SQwatermark
这是Object类的一个方法,你应该知道java中所有的类都继承了Object类,所以所有的类都自动拥有这个方法。
这个方法的作用是判断两个对象是否等价。
这不同于==,==判断的是对象是否相等,即指向相同的内存地址。
而equals没这么死板,就像我们不会特意区分货架上的两盒同样的商品,它们拥有同样的包装,同样的生产日期,那它们对购物者来说就没什么区别。
  1. public boolean equals(Object o) {
  2.     if (this == o) return true;
  3.     if (o == null || getClass() != o.getClass()) return false;
  4.     Tool01 tool01 = (Tool01) o;
  5.     return a == tool01.a &&
  6.             b == tool01.b;
  7. }
复制代码
这个方法就是对Object类中的equals方法的重写,为了尽可能少进行复杂的比较,首先判断输入的Object是否和自己就是同一个东西,如果是,则等价。如果不是,再判断输入的Object是否存在,如果存在,那么和自己是否是一类东西,如果都不是一类东西,那肯定不等价。再判断具体的属性是否相等,既然我们知道了输入的物品和自己是一类东西,也就是Tool01,那么就进行一个类型转换,将Object类型的输入转换为Tool01,这样我们就可以调用它的变量和方法,然后我们判断二者的类变量是否相同,如果相同,那么我们认为执行此方法的这个对象,与此方法的参数o,是完全等价的。

轩辕Shi
SQwatermark 发表于 2020-9-10 22:30
这是Object类的一个方法,你应该知道java中所有的类都继承了Object类,所以所有的类都自动拥有这个方法。
...

if (this == o) return true;
这里的this指向哪里?

SQwatermark
轩辕Shi 发表于 2020-9-11 15:23
if (this == o) return true;
这里的this指向哪里?

this就是这个方法所属的这个对象它自己啊

轩辕Shi
SQwatermark 发表于 2020-9-11 19:15
this就是这个方法所属的这个对象它自己啊

那这里的getclass方法是哪来的?
if (o == null || getClass() != o.getClass()) return false;

SQwatermark
轩辕Shi 发表于 2020-9-11 19:18
那这里的getclass方法是哪来的?
if (o == null || getClass() != o.getClass()) return false; ...

getClass方法是Object类自带的,所有类都自动继承了此方法。

第一页 上一页 下一页 最后一页