Object方法重写

这篇文章大家随意看看就好,只是一点理解的东西,当然你也可以认真调查。
我们需要知道Obecj是java中的一个类,是所有类的父类,即超类。对,超级赛亚人的那个超。
image.png
我们需要关注其中的equals、tostring这两个方法。
例如:

public class Student {
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

在这个例子的代码里,我们需要对tostring方法进行重写:

// @Override
// public String toString() {
//     return "姓名:" + name + " 年龄:" + age;
// }

这是我们大概的想法,那我们现在润色一下再实际写出来:

@Override
public String toString() {
    return "Student{" +
    "name='" + name + '\'' +
    ", age=" + age +
    '}';

那么,现在toString的功能就很明显了:将对象变成字符串输出。
我们可以采用Object的默认行为,也可以自己重写。
但如果想进行一些判定,就该重写equals这个类:
equals方法是用来比较两个对象是否相等的方法。在Object类中,equals方法的默认实现是比较两个对象的引用是否相同,即判断两个对象是否是同一个对象(内存地址是否相同)。但是,通常情况下我们需要重写equals方法来根据对象的内容进行比较,而不仅仅是比较对象的引用。
重写equals方法的目的是为了根据对象的特定属性进行比较,如果两个对象的属性值相同,则认为这两个对象是相等的。
在Java中,equals()方法是Object类中的一个方法,因此所有的Java类都继承了这个方法。要重写equals()方法,需要根据具体的业务逻辑来确定两个对象是否相等,比如比较对象的某些属性值是否相同。
现在我们就该想,在这个学生的例子中,要判定些什么:

  • 地址相同
  • 学生类的学号相等

我们拆开来看:

// 对象1.equals(对象2)
@Override
public boolean equals(Object obj) {
// 前置类型转换
Student student = (Student) obj;
if (this == obj) return true; // 如果对象1和对象2的地址一样,一定是同一个对象
// getClass(对象是根据那个类构造出来的)
// 1. 如果obj是一个null,没必要往后走
// 2. 如果对象1和对象2不是同一个类构造出来的(人类 和 狗类做对比)
if (obj == null || getClass() != obj.getClass()) return false;

或者自由发挥:

@Override
public boolean equals(Object obj){
Student student = (Student) obj;
// 1. 只要年龄相等就是一个人
if(this.age == student.age && this.name.equals(student.name)) {
    return  true;
} else {
    return  false;
}
}

好了,各位看官,请给一个一键三连以表支持吧!!!!!
image.png

相关推荐

  1. 方法,函数载,方法覆盖的区别

    2024-07-09 19:12:07       62 阅读
  2. 方法时的原则

    2024-07-09 19:12:07       58 阅读
  3. 081、Python 关于方法

    2024-07-09 19:12:07       21 阅读
  4. 方法重载和方法的区别

    2024-07-09 19:12:07       49 阅读
  5. 子类父类的方法

    2024-07-09 19:12:07       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-09 19:12:07       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-09 19:12:07       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-09 19:12:07       57 阅读
  4. Python语言-面向对象

    2024-07-09 19:12:07       68 阅读

热门阅读

  1. 等保测评新趋势:应对数字化转型中的安全挑战

    2024-07-09 19:12:07       30 阅读
  2. ZCC8801Low Noise High PSRR 1 Ch 500mA/1.0A Alternative LDO

    2024-07-09 19:12:07       29 阅读
  3. Kubernetes(k8s)和Docker Compose本质区别

    2024-07-09 19:12:07       30 阅读
  4. docker-compose部署node-exporter

    2024-07-09 19:12:07       24 阅读
  5. 美国大带宽服务器租用优势和注意事项

    2024-07-09 19:12:07       26 阅读
  6. 微信小程序常见页面跳转方式

    2024-07-09 19:12:07       33 阅读
  7. 【面试题】MySQL(第一篇)

    2024-07-09 19:12:07       26 阅读
  8. Linux系统中卸载GitLab

    2024-07-09 19:12:07       26 阅读
  9. P8086 『JROI-5』Music

    2024-07-09 19:12:07       24 阅读
  10. Scala学习笔记15: 文件和正则表达式

    2024-07-09 19:12:07       18 阅读