一、文字描述
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转化为当前类的对象,然后将对象中的成员进行逐个比较