java程序设计 1) 定义学生类,成员变量:姓名、学号; 2) 定义测试类,在main方法中创建学生对象s1,姓名为“张三”,学号为“1”;创建学生对象s2,姓名为“张三”,学号为“1”,比较s1和s2 是否相同?用==还是用equals()?观察运行结果,并分析结果; 3) 如要求,当两个学生的姓名和学号相同时,比较结果为true,该如何设计?设计代码后,再比较s1和s2,观察结果,并分析; 4) 重写hashCode方法,当两个学生对象的姓名和学号相同时,它们的hashCode也相同; 5) 在main方法中需要输出学生对象的信息,代码该如何设计(提示:toString( )方法)
时间: 2023-11-25 11:06:09 浏览: 107
1)学生类的代码如下:
```java
public class Student {
private String name; // 学生姓名
private String id; // 学生学号
public Student(String name, String id) {
this.name = name;
this.id = id;
}
public String getName() {
return name;
}
public String getId() {
return id;
}
public void setName(String name) {
this.name = name;
}
public void setId(String id) {
this.id = id;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", id='" + id + '\'' +
'}';
}
}
```
2)测试类的代码如下:
```java
public class Test {
public static void main(String[] args) {
Student s1 = new Student("张三", "1");
Student s2 = new Student("张三", "1");
System.out.println(s1 == s2); // false
System.out.println(s1.equals(s2)); // false
}
}
```
运行结果为false,因为s1和s2虽然属性值相同,但是它们是两个不同的对象,所以用==比较返回的结果是false。同样地,用equals()方法比较也返回false,因为默认情况下equals()方法比较的是两个对象的内存地址。
3)如果要求当两个学生的姓名和学号相同时比较结果为true,可以重写equals()方法,如下所示:
```java
public class Student {
//...
@Override
public boolean equals(Object obj) {
if(obj == null) {
return false;
}
if(this == obj) {
return true;
}
if(obj instanceof Student) {
Student s = (Student)obj;
if(this.name.equals(s.name) && this.id.equals(s.id)) {
return true;
}
}
return false;
}
}
```
重新运行main方法,观察结果如下:
```java
System.out.println(s1 == s2); // false
System.out.println(s1.equals(s2)); // true
```
可以看到,用equals()方法比较返回的结果是true,因为重写后的equals()方法比较的是两个对象的属性值。
4)重写hashCode()方法,如下所示:
```java
public class Student {
//...
@Override
public int hashCode() {
return Objects.hash(name, id);
}
}
```
这里使用了Objects类的静态方法hash(),该方法可以接受任意数量的参数,并生成一个哈希值。
5)要输出学生对象的信息,可以在Student类中重写toString()方法,如下所示:
```java
public class Student {
//...
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", id='" + id + '\'' +
'}';
}
}
```
然后在测试类中调用toString()方法输出学生对象的信息,如下所示:
```java
System.out.println(s1.toString());
System.out.println(s2); // 等同于System.out.println(s2.toString());
```
输出结果为:
```
Student{name='张三', id='1'}
Student{name='张三', id='1'}
```
阅读全文