[Java] 关于 == 和 equals 的比较

==的注意点

/*
 * == 运算符
 * 1. 可以使用在基本数据类型变量和引用数据类型变量中
 * 2. 如果比较的是基本数据类型变量 ,可直接比较两个变量是否相等(不用管是否相同变量)
 *    如果比较的是引用数据类型变量 , 比较两个数据的地址是否相等 , 即两个变量是否指向同一个变量实体
 *    如下例所示
 *
*/

public class TestEquals {
    public void main(String[] args[]){
        person s = new person();
        person s1 = new person();
    }
}
class  person{

 }


equals()方法的注意点

/*
  *equals()方法的注意
  * 1. 是一个方法 而不是运算符
  * 2. 只能用于引用数据类型
  * 3. Object类中定义的equals() 和 == 的作用是相同的,比较两个对象的地址是否相同
  * 4. 像 String、Date、File、包装类等都重写了equals()方法,不是比较两个引用对象的地址是否相等
  *     而是比较两个对象的内容是否相等
  * 5. 通常情况下,我们如果想要比较对象的内容是否相等的话
  *     也要对equals() 进行重写如下例所示
  */

class  Test{
    private int i ;
    private int j ;
    Test(){

    }
    public int getI() {
        return i;
    }

    public void setI(int i) {
        this.i = i;
    }


    public int getJ() {
        return j;
    }

    public void setJ(int j) {
        this.j = j;
    }

    @Override
    public boolean equals(Object obj) {
        if(this == obj)
            return true;
        if(obj instanceof Test){
            Test temp = (Test)obj;
            if(this.i == temp.i && this.j == temp.j){
                return true;
            }else{
                return false;
            }
        }else{
            return false;
        }
    }
}
public class TestEquals {

    public static void main(String[] args){
        Test s = new Test();
        Test s1 = new Test();
        s.setI(1);
        s.setJ(2);
        s1.setI(1);
        s1.setJ(1);
        System.out.println(s.equals(s1));
    }
}

posted @ 2021-08-18 10:26  Excting  阅读(42)  评论(0编辑  收藏  举报