java - 克隆实现未通过 'equals' 测试,调试时所有变量/字段都相同

标签 java clone equals

我正在做作业以通过一系列测试,我实现了自己的 equals 和 clone 函数,但无法弄清楚为什么克隆的对象不等于原始对象。

我尝试在 if 语句的 boolean 表达式中将对象强制转换为 Student,但这没有执行任何操作。

测试文件

Name n1 = new Name("John","Rockefeller");
Student s1 = new Student(n1, "123456");
Student s3 = s1.clone();
if ( s1.equals ( s3 ) )
        System.out.println ( "\t\tSuccess - Students s1 and s3 are the same." );

Student 类实现 Cloneable

private Name fullName;
private String id;

@Override
    public Student clone(){
        try {
            Student clone = (Student) super.clone();

            clone.fullName = (Name) fullName.clone();
            return clone;
        } catch (CloneNotSupportedException e) {
            System.out.println("Error: " + e);
            return null;
        }
    }

public boolean equals ( Object obj ) {
        if (this == (Student) obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        Student calc = (Student) obj;

        return Objects.equals(this.fullName, calc.fullName) && Objects.equals(this.id, calc.id);
    }

预期:测试通过,但是在观察调试跟踪器中的变量后,我不知道为什么它没有通过。值相等。

最佳答案

您的clone方法不会复制id。您的 equals 方法期望 id 相等。

关于java - 克隆实现未通过 'equals' 测试,调试时所有变量/字段都相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57680114/

相关文章:

java - 在 gRPC 中使用直接类以避免数据复制

java - 克隆 Swing 组件中的背景颜色

mysql - 复制表中的所有行并防止重复键

java - 从用户获取数据然后将其插入javadb

java - 如何将 keyListner 添加到 JOptionPane.showInputDialog()?

java - Struts 2 中未找到类异常

java - 为什么 Java 集合中的 contains()/indexOf() 使用 o.equals(e) 而不是 e.equals(o)?

Git 克隆私有(private)仓库,权限被拒绝

java - 这等于实现吗?

java - hashcode() 的有效且高效的实现