Java中比较的方法主要有以下几类
一:==运算符
==运算符常用来比较==左右两侧是否相等,如果左右两侧是基本数据类型,比较的是值是否相等;如果==左右两侧是引用类型,比较的是引用变量的地址是否相等
public class TestDemo {
public static void main(String[] args) {
String a = "hsp";
String b = "java";
Person c = new Person("李华",20);
Person d = new Person("李华",20);
Person e = c;
System.out.println(a == b);
System.out.println(c == d);
System.out.println(e == c);
}
}
class Person{
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
二:equals()
equals()方法常用来比较两个对象的地址是否相同,如果要比较对象中的类容,必须重写Object中的equals方法
public class TestDemo {
public static void main(String[] args) {
String a = "hsp";
String f = "hsp";
System.out.println(a.equals(f));//true
Person c = new Person("李华",20);
Person d = new Person("李华",21);
System.out.println(c.equals(d));//false
}
}
class Person{
private String name;
private int age;
public Person(){
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if(this==obj)return true;//自己和自己比
if(!(obj instanceof Person)||obj==null)return false;//如果对象为空或者不是Person子类返回false
Person person = (Person) obj;
return this.name.equals(person.name)&&this.age==person.age;
}
}
重写equals的方式虽然可以比较,但equals只能按照相等进行比较,不能按照大于、小于的方式进行比较。
三:基于Comparable接口类的比较
方法:实现Comparable接口,重写CompareTo方法
public class TestDemo2 {
public static void main(String[] args) {
Student[] student = new Student[3];
student[0] = new Student(20185427,"李华");
student[1] = new Student(20185434,"尹朝龙");
student[2] = new Student(20185421,"阿资曲不");
Arrays.sort(student);
System.out.println(Arrays.toString(student));
}
}
class Student implements Comparable<Student>{
private int num;
private String name;
public Student(int num,String name){
this.num = num;
this.name = name;
}
@Override
public int compareTo(Student o) {
return this.num-o.num;
}
@Override
public String toString(){
return "学号:"+num+" "+"姓名:"+name;
}
}
四:自己定义比较器,实现Comparator接口
方法:自己定义比较器,实现Comparator接口,重写compara方法
public class TestDemo3 {
public static void main(String[] args) {
Student2[] student2 = new Student2[3];
student2[0] = new Student2(20185427,"李华");
student2[1] = new Student2(20185434,"尹朝龙");
student2[2] = new Student2(20185421,"阿资曲不");
Arrays.sort(student2,new StudentComparator());
System.out.println(Arrays.toString(student2));
}
}
class Student2{
public int num;
public String name;
public Student2(int num,String name){
this.num = num;
this.name = name;
}
@Override
public String toString(){
return "学号:"+num+" "+"姓名:"+name;
}
}
class StudentComparator implements Comparator<Student2> {
@Override
public int compare(Student2 o1, Student2 o2) {
return o2.num-o1.num;
}
}
也可以这样
public class TestDemo3 {
public static void main(String[] args) {
Student2[] student2 = new Student2[3];
student2[0] = new Student2(20185427,"李华");
student2[1] = new Student2(20185434,"尹朝龙");
student2[2] = new Student2(20185421,"阿资曲不");
Arrays.sort(student2, new Comparator<Student2>() {
@Override
public int compare(Student2 o1, Student2 o2) {
return o1.num-o2.num;
}
});
System.out.println(Arrays.toString(student2));
}
}
class Student2{
public int num;
public String name;
public Student2(int num,String name){
this.num = num;
this.name = name;
}
@Override
public String toString(){
return "学号:"+num+" "+"姓名:"+name;
}
}