一、文字描述
1、内置类型用==比较
== 左右两侧如果是内置类型的变量,直接用变量中的数值直接比较
2、引用类型
引用类型变量使用==进行比较,并不是比较引用对象中的内容,而是比较引用对象的地址
二、代码演示
public class Date {
public int year;
public int month;
public int day;
public Date(int year,int month,int day){
super();//调用基类的构造方法
this.year = year;
this.month = month;
this.day = day;
}
@Override
public String toString() {
// return super.toString();需要进行重写
return "[" + year + "/" + month + "/" + day + "]";
}
@Override
public boolean equals(Object obj) {
if(obj == null){
return false;
}
//this == obj 检测this和obj指向的是否是同一个对象,那既然指向的是同一个对象,内容肯定一样
if(this == obj){
return true;
}
if(!(obj instanceof Date)){
return false;
}
Date d = (Date)obj;
return (year == d.year) && (month == d.month) && (day == ((Date) obj).day);
}
public static void method1(){
Date d = new Date(2022,9,13);
System.out.println(d);
}
public static void method2(){
int a = 10;
int b = 20;
int c = 10;
//内置类型使用==进行比较
System.out.println(a == b);
System.out.println(a == c);
System.out.println("==========================");
//引用类型使用==进行比较
Date d1 = new Date(2022,9,13);
Date d2 = new Date(2022,9,13);
Date d3 = new Date(2022,9,13);
System.out.println(d1 == d2);
System.out.println(d2 == d3);
//如果想要比较对象中的内容,需要调用equals的方法来比较,注意,equals必须要进行重写
System.out.println("==========================");
System.out.println(d1.equals(d2));
System.out.println(d2.equals(d3));
}
public static void main(String[] args) {
method1();
method2();
}
}
运行结果为:
注:对equals方法进行重写
1、先检测obj是否为空,如果为空,肯定不相等,直接返回false
2、需要检测是否为自己和自己比较,自己和自己比较肯定是相等的,直接返回true
3、两个不同的对象进行比较,此时需要检测obj是否为当前类的一个对象,如果不是,肯定不相等
4、说明obj一定是当前类的对象,将obj转化为当前类的对象,然后将对象中的成员进行逐个比较