这个java程序通过重写equals()方法来比较两个类型为person的对象,根据它们的name和age属性进行比较。首先使用equals()方法检查对象是否属于同一类,然后比较name和age属性。如果两个属性都匹配,方法返回true,表示对象相等。如果任何一个属性不同,方法返回false,表示对象不相等。
方法有两种标准方法使用 equals() 方法
不覆盖
使用覆盖
使用 hashcode() 和 equals() 方法
示例1:覆盖equals()方法在一个类中重写equals()方法允许根据对象的属性进行自定义比较。
方法我们首先定义一个person类,其中包含两个私有实例变量:name和age。
我们为person类定义了一个构造函数,它接受一个名称和年龄,并用这些值初始化实例变量。
我们在person类中重写了equals()方法,以便根据姓名和年龄比较两个person对象。equals()方法接受一个object参数,我们首先检查该参数是否不为空且是person类的一个实例。然后我们将该对象转换为person对象,并将其姓名和年龄属性与当前对象的姓名和年龄属性进行比较。
在main()方法中,我们创建了两个不同姓名和年龄值的person对象。
我们在第一个person对象上调用equals()方法,将第二个person对象作为参数传入。equals()方法返回一个布尔值,指示这两个对象是否相等。
最后,我们使用system.out.println()将比较的结果打印到控制台
public class objectcomparator { public static void main(string[] args) { // create two objects to compare person person1 = new person(alice, 25); person person2 = new person(bob, 30); // compare the two objects boolean areequal = person1.equals(person2); system.out.println(are the two objects equal? + areequal); }}class person { private string name; private int age; public person(string name, int age) { this.name = name; this.age = age; } @override public boolean equals(object obj) { if (obj == null) return false; if (!(obj instanceof person)) return false; person otherperson = (person) obj; return this.name.equals(otherperson.name) && this.age == otherperson.age; }}
explanation 的中文翻译为:解释在这个例子中,我们创建了两个具有不同名称和年龄的person对象,然后调用第一个对象的equals方法来比较它与第二个对象。equals方法在person类中定义,并检查这两个对象是否具有相同的名称和年龄属性。最后,我们将比较的结果打印到控制台上。
输出are the two objects equal? false
示例2:不覆盖equals()方法没有覆盖equals()方法,对象的比较是基于它们的引用而不是属性。
方法我们首先定义一个person类,其中包含两个私有实例变量:name和age。
我们为person类定义了一个构造函数,它接受一个名称和年龄,并用这些值初始化实例变量。
在main()方法中,我们创建了两个具有相同姓名和年龄值的person对象。
我们在第一个person对象上调用equals()方法,并将第二个person对象作为参数传入。由于我们没有在person类中重写equals()方法,因此使用了从object类继承的equals()方法的默认实现。该实现检查两个对象是否是同一个对象(即具有相同的内存地址),如果是,则返回true。由于person1和person2对象具有不同的内存地址,equals()方法返回false。
最后,我们使用system.out.println()将比较结果打印到控制台。
public class objectcomparator { public static void main(string[] args) { // create two objects to compare person person1 = new person(alice, 25); person person2 = new person(alice, 25); // compare the two objects boolean areequal = person1.equals(person2); system.out.println(are the two objects equal? + areequal); }}class person { private string name; private int age; public person(string name, int age) { this.name = name; this.age = age; }}
explanation 的中文翻译为:解释在这个例子中,我们创建了两个具有相同名称和年龄的person对象,然后调用equals方法来比较第一个对象和第二个对象。由于我们没有在person类中重写equals方法,所以使用了从object类继承的默认实现。这个实现检查这两个对象是否是同一个对象(即具有相同的内存地址),如果是,则返回true。由于person1和person2对象具有不同的内存地址,equals方法返回false。最后,我们将比较的结果打印到控制台。
输出are the two objects equal? false
示例3:使用hashcode()和equals()方法没有覆盖equals()方法,对象的比较是基于它们的引用而不是属性。
方法我们创建了两个person类的对象,person1和person2,它们的姓名和年龄相同。
我们然后在person1上调用hashcode()和equals()方法。
在person类中,我们重写了hashcode()方法,使用objects.hash()方法基于对象的name和age属性生成哈希码。
然后我们重写equals()方法,根据它们的姓名和年龄属性来比较两个person对象。该方法首先检查对象是否属于同一类,如果是,则使用objects.equals()方法检查它们的姓名和年龄属性是否相等。
在main()方法中,我们使用&&运算符通过hashcode()方法检查person1和person2的哈希码是否相同,并且通过equals()方法返回true。
最后,我们打印出一个消息,指示这些对象是否相等。
public class objectcomparator { public static void main(string[] args) { // create two objects to compare person person1 = new person(alice, 25); person person2 = new person(alice, 25); // compare the two objects using hashcode and equals methods boolean areequal = person1.hashcode() == person2.hashcode() && person1.equals(person2); system.out.println(are the two objects equal? + areequal); }}class person { private string name; private int age; public person(string name, int age) { this.name = name; this.age = age; } @override public int hashcode() { return objects.hash(name, age); } @override public boolean equals(object obj) { if (this == obj) return true; if (!(obj instanceof person)) return false; person other = (person) obj; return objects.equals(name, other.name) && age == other.age; }}
explanation 的中文翻译为:解释在这个例子中,我们创建了两个具有相同姓名和年龄的person对象,然后调用第一个对象的hashcode()和equals()方法来与第二个对象进行比较。
在person类中,我们重写了hashcode()和equals()方法,以便根据它们的name和age属性来比较对象。hashcode()方法返回name和age属性的组合的哈希码,equals()方法检查对象是否属于同一类,并且具有相同的name和age属性。
最后,我们使用&&运算符来检查两个对象的哈希码是否相同,并且equals()方法是否返回true。如果两个条件都为true,我们打印出对象相等的信息。否则,我们打印出对象不相等的信息。
输出the two person objects are equal
结论这个java程序使用equals()方法来比较两个person对象的属性,该方法已在person类中被重写。
该程序展示了定制对象比较的重要性,并突出了java在实现自定义比较逻辑方面提供的灵活性。
以上就是java程序比较两个对象的详细内容。
