@EqualsAndHashCode注解!!!

一、作用

1. 此注解会生成equals(Object other) 和 hashCode()方法。

2. 它默认使用非静态,非瞬态的属性

3. 可通过参数exclude排除一些属性

4. 可通过参数of指定仅使用哪些属性

5. 它默认仅使用该类中定义的属性且不调用父类的方法

6. 可通过callSuper=true解决上一点问题。让其生成的方法中调用父类的方法。

 1.@Data注解

@Data注解相当于@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode这5个注解的合集。

2.示例

1.创建一个基类 user

@Data
public class user {
    private  int id;
    private  String username;
    private  String password;
    private  boolean  teach;
}

2.创建一个people类继承user

@Data
//@EqualsAndHashCode(callSuper = true)
public class people extends user{
    private String color;
}

3.写一个test类

public class Test {
    public static void main(String[] args) throws JsonProcessingException {
     people peo1=new people();
     peo1.setColor("绿色");
     peo1.setId(1001);
     people peo2=new people();
     peo2.setColor("绿色");
     peo2.setId(1002);
     System.out.println(peo1.equals(peo2));
    }
}

返回结果为true

如果我们不加

@EqualsAndHashCode(callSuper = true)注解的话,其实@Data注解中已经包含了@EqualsAndHashCode 并且默认值为false,这种情况下

比较两个people类只会比较子类中字段的内容,即使我们分别设置的父类属性不同也不会去比较

4.加上@EqualsAndHashCode注解并设置callSuper=true

此时既会比较子类中的字段,也会比较父类中的字段,此时的结果为false


你可能感兴趣的:(java,java,开发语言)