Java 对象重写 equals 和 toString 方法:PersonOverride 类示例
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class PersonOverride {
private String name;
private int age;
private boolean gender;
public PersonOverride(String name, int age, boolean gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public PersonOverride() {
this('default', 1, true);
}
@Override
public String toString() {
return name + '-' + age + '-' + gender;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
PersonOverride other = (PersonOverride) obj;
return this.name.equals(other.name) && this.age == other.age && this.gender == other.gender;
}
public static void main(String[] args) {
List<PersonOverride> persons1 = new ArrayList<>();
int n1 = 3;
for (int i = 0; i < n1; i++) {
persons1.add(new PersonOverride());
}
List<PersonOverride> persons2 = new ArrayList<>();
int n2 = 2;
for (int i = 0; i < n2; i++) {
String name = "default";
int age = 1;
boolean gender = true;
// Input name, age, gender
// ...
PersonOverride person = new PersonOverride(name, age, gender);
boolean exists = false;
for (PersonOverride p : persons2) {
if (p.equals(person)) {
exists = true;
break;
}
}
if (!exists) {
persons2.add(person);
}
}
for (PersonOverride person : persons1) {
System.out.println(person);
}
for (PersonOverride person : persons2) {
System.out.println(person);
}
System.out.println("Number of objects in persons2: " + persons2.size());
System.out.println(Arrays.toString(PersonOverride.class.getConstructors()));
}
}
代码说明:
-
创建 PersonOverride 类
- 定义私有属性
name,age,gender - 创建有参构造方法和无参构造方法,无参构造方法默认值使用
this(name, age, gender)调用有参构造方法 - 重写
toString()方法,返回name-age-gender格式的字符串 - 重写
equals()方法,比较name,age,gender是否相等
- 定义私有属性
-
main 方法
- 使用
ArrayList创建两个列表persons1和persons2 - 使用无参构造方法创建
n1个对象并添加到persons1列表中 - 循环
n2次,输入name,age,gender(示例中使用默认值) - 创建
PersonOverride对象,并使用equals()方法判断对象是否已存在于persons2列表中 - 如果对象不存在,则将其添加到
persons2列表中 - 输出
persons1和persons2列表中的所有对象 - 输出
persons2列表中实际包含的对象数量 - 使用
Arrays.toString(PersonOverride.class.getConstructors())输出所有构造方法
- 使用
代码重构建议:
- 使用
ArrayList代替数组,可以更方便地添加、删除和访问元素,避免数组大小固定的限制。 - 在
equals()方法中,使用instanceof运算符判断类型,可以提高代码健壮性。 - 可以使用
Objects.equals()方法简化equals()方法的实现。 - 可以使用
StringBuilder或StringBuffer类拼接字符串,提高效率。
原文地址: https://www.cveoy.top/t/topic/o8QZ 著作权归作者所有。请勿转载和采集!