A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 庭院深深深几许 金牌黑马   /  2019-4-18 15:21  /  855 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

两个对象进行比较相等,有两种做法:
1,情况一:当仅仅只是判断两个对象是否相等时,只需重写equals()方法即可。这里就不用说明
2.情况二:当除了情况一之外,还需知道是那个属性不同,那么就需要采用类反射,具体代码如下:
public static void main(String[] args) {
A a = new A();
a.setUserName("a");
a.setPassword("p");
a.setQq("q");
a.setWechat("w");
[Java] 纯文本查看 复制代码
  A b = new A();
    b.setUserName("a");
    b.setPassword("p");
    b.setQq("q");
    b.setWechat("ww");

    //只是比较两个对象是否相等,那么直接重写equals方法
    System.out.println( a.equals(b));

    try {
        Map<String, String> maps = compare( a, b );
        System.out.println();
    } catch (Exception e) {
        e.printStackTrace();
    }
}





public static <T> Map<String, String> compare(T obj1, T Obj2)
        throws Exception {

    Map<String, String> result = new HashMap<String, String>();

    Field[] fs = obj1.getClass().getDeclaredFields();
    for (Field f : fs) {
        f.setAccessible(true);
        Object v1 = f.get(obj1);
        Object v2 = f.get(Obj2);
        if( ! equals(v1, v2) ){
            result.put(f.getName(), String.valueOf(equals(v1, v2)));

        }
    }
    return result;
}

public static boolean equals(Object obj1, Object obj2) {

    if (obj1 == obj2) {
        return true;
    }
    if (obj1 == null || obj2 == null) {
        return false;
    }
    return obj1.equals(obj2);




传智Java培训拥有6大课程优势——http://www.itcast.cn/javaee/
①独有的一站式IT职业教育体系,让学员通过6个月的线下学习实现高起点就业, 12个月的线上在职进阶课实现升职加薪,大幅提升学员的职场晋升速度。
②60+套技术解决方案,覆盖职场常见开发问题,让学员就业后快速上手开发难题,轻松成为核心员工。
③超大项目库,覆盖7大就业主流热门行业,让学员边学习边积累项目开发经验。
④超千人投入的3大课程研发库,每年耗资千万打造领先行业的优质课程。
⑤传智&华为课程共建,持续为课程输出前沿技术。
⑥120+超强师资团队,多为总监、架构师出身,除了专业技能,还为你规划适合你的职业发展路线。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马