首頁  >  文章  >  Java  >  Java中兩個物件的比較 equals()方法和==號的區別

Java中兩個物件的比較 equals()方法和==號的區別

黄舟
黄舟原創
2017-01-18 15:43:181371瀏覽

在Java中,時不時我們會把兩個物件進行,然而得到的結果卻不是我們想的結果,這是怎麼回事呢?

一、兩種形式的比較:比較時,我們要弄清楚是哪一種比較。 

1.值類型比較 

即內容相同,我們就認為是相等的。例如:int i=5;int j =5;此時我們說i和j相等,其實指的是i和j的內容相同。



2.引用類型比較 

但在Java中,除了值類型,另外還有一種引用類型,而不同的對象,其引用值其實並不相等,即在內存中的不同的地址單元中。例如我們定義了學生類,分別有兩個學生物件實例: 

Student stu= new Student(); Student stu1= new Student();

此時我們無論是使用stu==stu1符號,或是stu.equals(stu1)方法,把兩個物件進行比較,得到的結果都是不相等的,因為對於引用類型來說,預設是比較兩個物件引用的位址,顯示,每個物件的參考有自己唯一的位址,所以,是不相等。

二、有時,我們比較兩個物件時,如果他們的內容一樣,那麼我們就認為這兩個物件是相等的,如上面的兩個學生物件。這時,我們該怎麼辦呢?其實,非常簡單,只要在類別裡面重寫equals()方法,進行物件裡面的內容比較久可以了。如上面,我們只需要在Student類別中重寫equals()方法即可。

下面,讓我們來看看實例吧! 沒有重寫equals()方法時的比較:

學生類別:Student類別

package com.bluesky;  
  
public class Student {  
      
    String name;  
      
    public Student(){  
          
    }  
      
    public Student(String name){  
          
        this.name=name;  
          
    }</strong>  
      
  
}</span>

測試類別Test:

package com.bluesky;  
  
public class Test {  
  
    public static void main(String[] args) {  
  
      int i=5;  
      int j=5;  
        
      if(i==j) System.out.println("i和j相等!");  
      else System.out.println("不相等!");  
        
      Student s = new Student("BlueSky");  
      Student s1=new Student("BlueSky");  
        
      if(s==s1)  System.out.println("s和是s1相等!");  
      else System.out.println("s和是s1不相等!");  
        
      if(s.equals(s1)) System.out.println("s和是s1相等!");  
      else System.out.println("s和是s1不相等!");  
    }  
}

運行結果:

寫equals()方法後再比較:Java中兩個物件的比較 equals()方法和==號的區別

Student類別:

package com.bluesky;  
  
public class Student {  
      
    String name;  
      
    public Student(){  
          
    }  
      
    public Student(String name){  
          
        this.name=name;  
          
    }  
  
      
    public boolean equals(Object obj) {  
        if (this == obj)      //传入的对象就是它自己,如s.equals(s);肯定是相等的;  
            return true;   
        if (obj == null)     //如果传入的对象是空,肯定不相等  
            return false;  
        if (getClass() != obj.getClass())  //如果不是同一个类型的,如Studnet类和Animal类,  
                                           //也不用比较了,肯定是不相等的  
            return false;  
        Student other = (Student) obj;       
        if (name == null) {  
            if (other.name != null)  
                return false;  
        } else if (!name.equals(other.name))   //如果name属性相等,则相等  
            return false;  
        return true;  
    }

測試類別Test:

package com.bluesky;  
  
public class Test {  
  
    public static void main(String[] args) {  
  
      int i=5;  
      int j=5;  
        
      if(i==j) System.out.println("i和j相等!");  
      else System.out.println("不相等!");  
        
      Student s = new Student("BlueSky");  
      Student s1=new Student("BlueSky");  
        
      if(s==s1)  System.out.println("s和是s1相等!");  
      else System.out.println("s和是s1不相等!");  
        
      if(s.equals(s1)) System.out.println("s和是s1相等!");  
      else System.out.println("s和是s1不相等!");  
    }  
}

運行結果:

重寫equals()方法後,得到s和1Java中兩個物件的比較 equals()方法和==號的區別重寫equals()方法後,得到s和11%。 ==對引用型別的只能進行位址比較,故還是不相等的。

以上就是Java中兩個物件的比較 equals()方法和==號的區別的內容,更多相關內容請關注PHP中文網(www.php.cn)!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn