java .equals()和==的區別


  前幾天突然又接觸了java的.equals()和==發現有新的收獲。首先,讓我們來看一下他們的區別。

      (1)比較java基本類型:

  比較基本類型只能用"==",不能用"equals",這里的"=="比較的是兩個基本類型的值

  (2)比較包裝類:這里拿Integer來舉例,Character不能用"=="比較,不知道為什么?

public class TestEquals
{
    public static void main(String[] args)
    {
        
        Integer b1=new Integer(1);
        Integer b2=new Integer(1);
        System.out.println(b1==b2);
        System.out.println(b1.equals(b2));
    }
    
}

  輸出的結果是:false

                         true

 

  這邊"=="比較的是對象的內存地址,new了兩個不同的對象所存放的地址是不一樣的,這邊的"equals"比較的就是內容,這里為什么比較的是內容,equals里的重寫了equals的方法。附上源碼:

 

 public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }

 (3) 比較String

  "=="比較的是內存地址,"equals"比較的是值

 (4)比較對象

 

        TestEquals a=new TestEquals("x");
        TestEquals b=new TestEquals("x");
        System.out.println(a==b);
        System.out.println(a.equals(b));

 

輸出結果:false

              false

 

    這里"=="比較的是內存地址,"equals"比較的也是地址,沒有重寫equals方法的類都是調用的Object的equals的方法,

 

  public boolean equals(Object obj) {
        return (this == obj);
    }

 

 

 

總結:"=="除了比較基本數據之外都是比較的內存地址

   "equals"除了沒有沒有重寫equals方法的類之外都是比較的內容

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM