上机实现下列程序并观察程序的运行情况: 1.编写一Person类,通过重写toString()、equals()、hashcode()方法,实现可以对Person类实例化出的对象进行equals和==的比较。 2.测试程序: Person p0, p1, p2, p3; p0 = new Person( ); p1 = new Person( “2021001”, “zhang li” ); p2 = new Person( “2021002”, “zhang li” ); p3 = new Person( “2021001”, “zhang li” ); System.out.println( p0 ); System.out.println( p1.equals( p2 ) ); System.out.println( p1.equals( p3 ) ); 要求运行结果如下: Name: unknown false true,该实验的总结与体会怎样写
时间: 2024-01-31 10:05:00 浏览: 108
操作系统上机实验的程序
这是一个Java面向对象的实验,主要涉及到重写Object类的toString()、equals()、hashcode()方法。具体实现如下:
```java
public class Person {
private String id;
private String name;
public Person() {
this.id = "unknown";
this.name = "unknown";
}
public Person(String id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "Name: " + this.name;
}
@Override
public boolean equals(Object obj) {
if (obj == null || !(obj instanceof Person)) {
return false;
}
Person p = (Person) obj;
return this.id.equals(p.id) && this.name.equals(p.name);
}
@Override
public int hashCode() {
int result = 17;
result = 31 * result + this.id.hashCode();
result = 31 * result + this.name.hashCode();
return result;
}
}
```
在这个Person类中,我们重写了toString()方法,使得输出的信息是“Name: ”加上实例的name属性值。同时,重写了equals()方法,使得可以比较两个Person实例是否相等。在这个方法中,我们先判断obj是否为null或者不是Person类的实例,如果是,则直接返回false。然后将obj强制转换为Person类的实例,再比较id和name属性是否相等。最后,重写了hashCode()方法,保证了相等的对象有相等的哈希值。
在测试程序中,我们创建了四个Person实例,并使用了equals()方法进行比较,输出结果如下:
```
Name: unknown
false
true
```
可以看到,第一个Person实例输出的信息是“Name: unknown”,符合我们在toString()方法中的设定。而第二个和第三个Person实例通过equals()方法的比较结果分别是false和true,符合我们在equals()方法中的设定。
总的来说,这个实验通过重写Object类的方法,让我们更好地理解了Java中面向对象的概念,并学会了如何比较两个对象的相等性。同时,这个实验也让我们更加熟悉了Java中的hashCode()方法,了解了哈希值的概念及其在Java中的应用。
阅读全文