目錄
實現(xiàn)比較兩個對象是否相同
1.前置代碼
1.學生類
2.示例?
3.輸出?
4.原因
2.那么我們要怎么做呢?
1.對Student類中重新實現(xiàn)quals方法(即對equals方法重寫)?
2.完整代碼如下:
3.具體操作
4.演示
1.示例
2.輸出
3.原因?
實現(xiàn)比較兩個對象的大小?
第一種: 用接口的方式實現(xiàn),實現(xiàn)一個Comparable接口,并指定比較的類型
1.演示代碼
2.示例?
3.代碼輸出結果
第二種: 使用比較器(博主推薦使用!!!)
1.演示代碼
(1)名字比較器
(2)年齡比較器
2.示例
3.代碼輸出結果
完結撒花??ヽ(°▽°)ノ?
實現(xiàn)比較兩個對象是否相同
1.前置代碼
1.學生類
class Student{
String name;
int age;
public Student(String name,int age){
this.name=name;
this.age=age;
}
}
2.示例?
Student student1 = new Student("fly",19);
Student student2 = new Student("fly",19);
System.out.println(student2==student1);
3.輸出?
輸出: false ==//默認比較的是兩個引用的地址
4.原因
原因:所有類默認繼承于object,所以student1調用的是object的equals
? equals的源碼public boolean equals(Object obj) { return (this == obj); }
obj:obj是參數(shù)
this:隨調equals誰是this
return (this == obj);
等價于return students1 == students2
2.那么我們要怎么做呢?
1.對Student類中重新實現(xiàn)quals方法(即對equals方法重寫)?
//對equals方法進行重寫(即自定義的equals方法)
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age && Objects.equals(name, student.name);
}
//實現(xiàn)了比較時當年齡和名字相同的情況下,認為是同一個對象
2.完整代碼如下:
class Student{
String name;
int age;
public Student(String name,int age){
this.name=name;
this.age=age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age && Objects.equals(name, student.name);
}
}
3.具體操作
在IDEA右鍵generate(快捷鍵:Alt+Insert),
再選擇equals() and hashCode(),一路next就ok了
4.演示
1.示例
?System.out.println(student1.equals(student2));
2.輸出
輸出:true
3.原因?
當代碼運行的時候,就會使用自定義的equals方法
實現(xiàn)了比較時當兩個對象年齡和名字相同的情況下,會被認為是同一個對象
實現(xiàn)比較兩個對象的大小?
第一種: 用接口的方式實現(xiàn),實現(xiàn)一個Comparable接口,并指定比較的類型
1.演示代碼
class Student implements Comparable<Student>{
String name;
int age;
public Student(String name,int age){
this.name=name;
this.age=age;
}
@Override
public int compareTo(Student o) {
return this.age-o.age;
}
}
2.示例?
Student student1 = new Student("初一",19)
Student student2 = new Student("初三",21);
System.out.println(student1.equals(student2));//輸出: -2
System.out.println(student1.compareTo(student2));//輸出: 2
Student student3 = new Student("初五",19);
System.out.println(student1.compareTo(student3));//輸出: 0
3.代碼輸出結果
文章來源:http://www.zghlxwxcb.cn/news/detail-709429.html
第二種: 使用比較器(博主推薦使用!!!)
1.演示代碼
(1)名字比較器
class NameComparator implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
return o1.name.compareTo(o2.name);
}
}
(2)年齡比較器
class AgeComparator implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
return o1.age-(o2.age);
}
}
2.示例
Student student1 = new Student("初一",19);
Student student2 = new Student("初三",21);
Student student3 = new Student("初一",21);
NameComparator nameComparator = new NameComparator();
int retName = nameComparator.compare(student1, student3);
System.out.println(retName);//輸出: 0
AgeComparator ageComparator = new AgeComparator();
int retAge=ageComparator.compare(student2,student3);
System.out.println(retAge);//輸出: 0
System.out.println(ageComparator.compare(student1, student3));//輸出: -2
System.out.println(ageComparator.compare(student3, student1));//輸出: 2
3.代碼輸出結果
文章來源地址http://www.zghlxwxcb.cn/news/detail-709429.html
完結撒花??ヽ(°▽°)ノ?
到了這里,關于淺談java自定義中類兩個對象的比較的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!