当前位置: 首页 > 知识库问答 >
问题:

为什么即使输出相同,s1不等于s3?

邹俊友
2023-03-14
/* Student class with a constructor that initialises the name, gender, and degreeProgramme. */

public class Student {

    public static void main(String[] args){
        Student s1 = new Student("a", "b", "c", "d");
        System.out.println(s1.toString());

        s1.setName("Mary Jones");
        s1.setGender("female");
        s1.setStudentID("0564");;
        s1.setDegreeProgramme("History");


        Student s2 = new Student("Mary jones", "female", "0564", "History");
        Student s3 = new Student("Mary Jones", "female", "0564", "History");
        System.out.println(s1);
        System.out.println(s3);
        System.out.println(s2);
        System.out.println(s1.equals(s2));
        System.out.println(s1.equals(s3));
    }

    private String name; /* instance variable */
    private String gender; /* instance variable */
    private String studentID; /* instance variable */
    private String degreeProgramme; /* instance variable */

    /* Student constructor that receives 4 parameters */
    public Student(String name, String gender, String studentID, String degreeProgramme){

        this.name = name; /* assigns name to instance variable name */
        this.gender = gender; /* assigns gender to instance variable gender */
        this.studentID = studentID; /* assigns studentID to instance variable studentID */
        this.degreeProgramme = degreeProgramme; /* assigns degreeProgramme to instance variable degreeProgramme */


    }
    /* method that returns the name of the student */
    public String getName(){
        return name;
    }

    /* method that returns the gender of the student */
    public String getGender(){
        return gender;
    }
    /* method that returns the degree programme of the student */
    public String getDegreeProgramme(){
        return degreeProgramme;
    }

    /* method that returns the student ID */
    public String getStudentID(){
        return studentID;
    }

    /* method that sets the name of the student */
    public void setName(String name){
        this.name = name;
    }
    /* method that sets the student ID */
    public void setStudentID(String studentID){
        this.studentID = studentID;
    }

    /* method that sets the gender of the student */
    public void setGender(String Gender){
        this.gender = Gender;
    }

    /* method that sets the degree programme of the student */
    public void setDegreeProgramme(String degreeProgramme){
        this.degreeProgramme = degreeProgramme;
    }

    /* method that returns the name, gender, and degree programme of the student */
    public String toString(){
        String studentInfo = "["+name+ ", " +gender+ ", ID: " +studentID+ ", " +degreeProgramme+"]" ;
        return studentInfo;
    }


} /* end class Student */

共有1个答案

冀啸
2023-03-14

当前,您正在使用从类java.lang.Object继承的equals方法,该方法实现如下:

public boolean equals(Object obj) {
    return this == obj;
}

它检查this和obj是否引用了同一个实例。在您的示例中,s1和s3是Student的不同实例,因此s1.equals(s3)返回false。

您可以实现自己的equals方法来实现您的目的,例如:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof Student)) return false;

    Student student = (Student) o;

    if (name != null ? !name.equals(student.name) : student.name != null) return false;
    if (gender != null ? !gender.equals(student.gender) : student.gender != null) return false;
    if (studentID != null ? !studentID.equals(student.studentID) : student.studentID != null) return false;
    return !(degreeProgramme != null ? !degreeProgramme.equals(student.degreeProgramme) : student.degreeProgramme != null);
}
 类似资料:
  • 问题内容: 我正在使用具有Spring安全性的BCryptPasswordEncoder。我的期望是,对于相同的输入,我将始终获得相同的输出。但是对于相同的输入,我得到不同的输出。您可以使用以下代码段对其进行测试: 输出:$ 2a $ 10 $ cYLM.qoXpeAzcZhJ3oXRLu9Slkb61LHyWW5qJ4QKvHEMhaxZ5qCPi 输出2:$ 2a $ 10 $ KEvYX9y

  • 本文向大家介绍shorts1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?相关面试题,主要包含被问及shorts1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?时的应答技巧和注意事项,需要的朋友参考一下 答: short s1 = 1; s1 = s1 + 1;有错,s1是short型,

  • 我正在使用带有Spring Security的BCryptPasswordEncoder。我的期望是,对于相同的输入,我总是得到相同的输出。但是对于相同的输入,我得到不同的输出。您可以使用下面的代码片段对其进行测试: 输出:$2A$10$CYLM.QOXPEAZCZHJ3OXRLU9SLKB61LHYWW5QJ4QKVHEMHAXZ5QCPI 输出2:$2A$10$kevyx9yjj0f1x3wl

  • 我需要从30fps的视频中提取帧两次:(I)720p png帧,(ii)270p tiff帧。 我分别使用以下命令来实现这一点: 然而,这导致第一命令输出35,776帧,第二命令输出35,812帧,尽管视频是相同的,并且所请求的framerate是30fps。 这是什么原因造成的?如何确保ffmpeg输出相同数量的(同步)帧?

  • 我写了一段代码,对给定的输入进行排序,但在返回排序后的输入后,它将始终返回相同的输出。我正在使用创建控制台应用程序。Visual Studio中的NET 5.0(当前版本)。 当我输入“Car-Apple-Banana”时,它会按单词排序。排序() 之后,我打印出原始输入,但它似乎也被排序。我不知道为什么,因为我从不分类。 当输入为:“汽车苹果香蕉” 我现在得到的输出是: 苹果香蕉车 苹果香蕉车

  • 问题内容: 似乎以下代码应返回true,但返回false。 这有什么意义? 问题答案: 常规()和严格()相等之间的唯一区别是,严格相等运算符禁用类型转换。由于已经在比较两个相同类型的变量,因此使用的相等运算符的类型无关紧要。 不管您使用常规相等还是严格相等,对象比较仅 在您比较相同的精确对象时得出 。 也就是说,给定,,,但。 两个不同的对象(即使它们都具有零或相同的精确属性)也永远不会相等地进