使用上几次用到得User实体类,在其中重写equals方法。

    @Override
    public boolean equals(Object obj) {
        if(obj==null)return false;
        if(this==obj)return true;
        if(obj instanceof User) {
            User u = (User) obj;
            return this.getId()==u.getId()
                    &&this.getUsername().equals(u.getUsername())
                    &&this.getPassword().equals(u.getPassword())
                    &&this.getAge()==u.getAge();
        }
        return false;
    }

这里重写的方法,将内容相同的User对象视为同一个User对象

测试方法

User类

public class User {
    private Integer id;
    private String username;
    private String password;
    private Integer age;
    public User() {
        super();
    }
    public User(Integer id, String username, String password, Integer age) {
        super();
        this.id = id;
        this.username = username;
        this.password = password;
        this.age = age;
    }

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", username=" + username + ", password=" + password + ", age=" + age + "]";
    }

    @Override
    public boolean equals(Object obj) {
        if(obj==null)return false;
        if(this==obj)return true;
        if(obj instanceof User) {
            User u = (User) obj;
            return this.getId()==u.getId()
                    &&this.getUsername().equals(u.getUsername())
                    &&this.getPassword().equals(u.getPassword())
                    &&this.getAge()==u.getAge();
        }
        return false;
    }
}

测试类EqualsTest.java

public class EqualsTest {
    public static void main(String[] args) {
        User u1 = new User(1, "三哥无邪", "1514010311", 21);
        User u2 = new User(1, "三哥无邪", "1514010311", 21);
        User u3 = u2;
        User u4 = new User(2, "三哥无邪", "1514010311", 21);
        System.out.println(u1.equals(u2));
        System.out.println(u1.equals(u3));
        System.out.println(u2.equals(u3));
        System.out.println(u2.equals(u4));
    }
}

结果

第四次作业 重写equals方法的更多相关文章

  1. Effective Java 第三版——10. 重写equals方法时遵守通用约定

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  2. 重写equals方法(未完)

    equals方法是我们日常编程中很常见的方法,Object中对这个方法的解释如下: boolean equals(Object obj) 指示其他某个对象是否与此对象“相等”. 查看该方法的底层代码如 ...

  3. 重写equals方法需要知道的事

    重写equals方法 相信在每个人都有过重写过java的equals的方法的经历.这篇博文就从以下几个方面说明重写equals方法的原由,与君共进步. 一 为什么要重写equals方法 首先我们了解e ...

  4. java重写equals方法

    @Override public int hashCode() { return task.getId(); } @Override public boolean equals(Object obj) ...

  5. 重写equals()方法时,需要同时重写hashCode()方法

    package com.wangzhu.map; import java.util.HashMap; /** * hashCode方法的主要作用是为了配合基于散列的集合一起正常运行,<br/&g ...

  6. 为什么重写equals方法还要重写hashcode方法?

    我们都知道Java语言是完全面向对象的,在java中,所有的对象都是继承于Object类.Ojbect类中有两个方法equals.hashCode,这两个方法都是用来比较两个对象是否相等的. 在未重写 ...

  7. 为什么要重写equals()方法与hashCode()方法

    在java中,所有的对象都是继承于Object类.Ojbect类中有两个方法equals.hashCode,这两个方法都是用来比较两个对象是否相等的. 在未重写equals方法我们是继承了object ...

  8. C#中在比较自定义对象的时候要重写Equals方法

    using System;using System.Collections.Generic;using System.Text; namespace Equal{    using System; c ...

  9. 为什么重写 equals 方法 必须重写 hashCode

    自己学到这,就记录了下来,代码都是自己敲得,有不对的地方希望大神指点出来 为什么重写 equals 方法 必须重写 hashCode 如果你重写了equals,比如说是基于对象的内容实现的,而不重写 ...

随机推荐

  1. PowerBuilder编程新思维3:适配(三层架构与GraphQL)

    PowerBuilder编程新思维3:适配(三层架构与GraphQL) PB在富客户端时代,是一线开发工具.随着网络发展,主流架构演进到三层架构的时代,PB拿不出有力的三层架构,已经明显力不从心,市场 ...

  2. new image的使用

    在看别人的程序,用到了new image()这种方法,然而怎么看也不是很明白: 于是就上网搜,然而却没有一个人能够解开我心中的疑惑,因为没有一个人的程序是完整的, 即使我知道怎么用,但是我看不到效果就 ...

  3. Mysql技能之【性能优化方案】

    两个SHOW命令 Mysql服务状态 SHOW GLOBAL STATUS; Mysql配置信息 SHOW VARIABLES: 慢查询 show variables like '%slow%'; s ...

  4. 【模板】堆优化 + dij +pair 存储

    就是短 感谢Cptraserdalao的博客 #include<bits/stdc++.h> using namespace std; struct node { int val,num; ...

  5. Linux创建用户等操作

    转自: https://www.linuxidc.com/Linux/2017-06/144916.htm 与大家分享下Linux系统中创建用户.设置密码.修改用户.删除用户的命令,希望对你有所帮助. ...

  6. -C++11可变模版参数(转载)

    泛化之美--C++11可变模版参数的妙用 1概述 C++11的新特性--可变模版参数(variadic templates)是C++11新增的最强大的特性之一,它对参数进行了高度泛化,它能表示0到任意 ...

  7. JavaSE——多线程实现的两种方式

    Thread类: 创建新执行线程有两种方法. 一种方法是将类声明为 Thread 的子类.该子类应重写 Thread 类的 run 方法.接下来可以分配并启动该子类的实例.例如,计算大于某一规定值的质 ...

  8. OSGI企业应用开发(二)Eclipse中搭建Felix运行环境

    上篇文章介绍了什么是OSGI以及使用OSGI构建应用的优点,接着介绍了两款常用的OSGI实现,分别为Apache Felix和Equinox,接下来开始介绍如何在Eclipse中使用Apache Fe ...

  9. python 日志打印之logging使用介绍

    python 日志打印之logging使用介绍 by:授客QQ:1033553122 测试环境: Python版本:Python 2.7   简单的将日志打印到屏幕 import logging lo ...

  10. 2018-10-23 23:29:54 clanguage

    2018-10-23   23:29:54 clanguage 在 32 位环境以及 Win64 环境下的运行结果为: short=2, int=4, long=4, char=1 在 64 位 Li ...