天天看點

[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));
    }
}