Java中有些情况下需要比较对象的内容,那么怎么比较对象的内容呢?
下面介绍三种比较方式。
覆写基类的equal
第一种,覆写equals方法可以比较两个对象的内容是否相等,实现如下:
class Teacher{
String name;
Teacher(String name){
this.name=name;
}
//覆写equals方法 如果不覆写t1.equlas(t2)也是不相等的
@Override
public boolean equals(Object o) {
//检查是否为空 空一定不是
if(o==null){
return false;
}
//检查类型 不同的类型一定不能代表同一事物
if(!(o instanceof Teacher)){
return false;
}
//根据我们设计类的目的 名字相同代表同一事物
Teacher obj=(Teacher)o;//向下转型
//比较
return this.name.equals(obj.name);
}
}
public class demo {
public static void main(String[] args) {
Teacher t1=new Teacher("lili");
Teacher t2=new Teacher("lili");
Teacher t3=new Teacher("lisa");
//t1所指向的对象和t2所指向的对象是否代表了同一个现实事物 需要开发者指导Java
System.out.println(t1.equals(t2));//true
System.out.println(t2.equals(t3));//false
}
}
基于Comparable接口类的比较
equal只能比较是否相等,不能比较出大于小于,以下介绍第二种方法:
需要在定义类时,实现Comparable接口即可,然后在类中重写compareTo方法。
具体实现如下:
class Teacher implements Comparable<Teacher>{
String name;
int age;
int weight;
int height;
public Teacher(String name, int age, int weight, int height) {
this.name = name;
this.age = age;
this.weight = weight;
this.height = height;
}
//通过重写该方法 指导Java 进行对象大小的比较
//natural ordering
//大小如何有哪个条件决定 由开发者自行选择
//此处按照年龄比较
@Override
public int compareTo(Teacher o) {
if(this.age<o.age){
return -1;
}else if(this.age==o.age){
return 0;
}else{
return 1;
}
//return age-o.age;等价
}
}
public class demo {
public static void main(String[] args) {
Teacher t1=new Teacher("lili",18,55,168);
Teacher t2=new Teacher("lisa",19,60,170);
int r=t1.compareTo(t2);
if(r<0){
System.out.println("lili<lisa");
}else if(r==0){
System.out.println("lili=lisa");
}else{
System.out.println("lili>lisa");
}
}
}
基于比较器比较
但在有些情况下,不支持Comparable接口,无法修改类,此时就需要用到比较器。
需要用户自定义比较器类,实现Comparator接口,然后覆写Comparator中的compare方法。
具体实现如下:
class Teacher {
String name;
int age;
int weight;
int height;
public Teacher(String name, int age, int weight, int height) {
this.name = name;
this.age = age;
this.weight = weight;
this.height = height;
}
}
class ByHeightComparator implements Comparator<Teacher>{
@Override
public int compare(Teacher o1, Teacher o2) {
return o1.height-o2.height;
}
}
class ByWeightComparator implements Comparator<Teacher>{
@Override
public int compare(Teacher o1, Teacher o2) {
return o1.weight-o2.weight;
}
}
public class demo {
public static void main(String[] args) {
Teacher t1=new Teacher("lili",18,65,168);
Teacher t2=new Teacher("lisa",19,60,170);
Comparator<Teacher> byheight=new ByHeightComparator();
Comparator<Teacher> byweight=new ByWeightComparator();
int r1=byheight.compare(t1,t2);
int r2=byweight.compare(t1,t2);
System.out.println(r1);
System.out.println(r2);
}
}
以上就是Java中对象比较的三种方式了,码字不易,感谢支持!