真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

javaequals()方法如何使用

這篇文章主要介紹了java equals()方法如何使用的相關(guān)知識,內(nèi)容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇java equals()方法如何使用文章都會有所收獲,下面我們一起來看看吧。

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、重慶小程序開發(fā)公司、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了雙橋免費建站歡迎大家使用!

在java中,equals()方法用于檢測一個對象是否等于另一個對象,語法“Object.equals(Object2)”;該方法判斷兩個對象是否具有相同的引用,如果兩個對象具有相同的引用,它們一定是相等的。equals()方法不能作用于基本數(shù)據(jù)類型的變量。

java equals()方法判斷對象是否相等

equals方法用于檢測一個對象是否等于另一個對象。注意:equals方法不能作用于基本數(shù)據(jù)類型的變量

在Object類中,這個方法判斷兩個對象是否具有相同的引用,如果兩個對象具有相同的引用,它們一定是相等的。

從這點上看,將其作為默認操作也是合乎情理的。然而,對于多數(shù)類來說,這種判斷并沒有什么意義,例如,采用這種方式比較兩個PrintStream是否相等就完全沒有意義。然而,經(jīng)常需要檢測兩個對象狀態(tài)的相等性,如果兩個對象的狀態(tài)相等,就認為這兩個對象是相等的。所以一般在自定義類中都要重寫equals比較。

下面給出編寫一個完美equals()方法的建議:

(1)顯式參數(shù)命名為otherObject,稍后需要將轉(zhuǎn)換成一個叫other的變量

(2)檢測this與otherObject是否引用同一個對象:

if(this==otherObject) return true;

這條語句只是一個優(yōu)化。實際上,這是一種經(jīng)常采用的形式。因為計算這個等式要比一個一個地比較類中的域所付出的代價小的多。

(3)檢測otherObject是否為null,如果為null,返回false。這項檢測是很必要的。

if(otherObject==null) return false;

(4)比較this和otherObject是否屬于同一個類,如果equals的語義在每個子類中有所改變,就使用getClass()檢測,它將自己作為目標類

if(getClass()!=otherObject.getClass()) return false;

如果所有的子類都擁有同一的語義,就使用instanceof檢測

if(!(otherObject instanceof ClassName)) return false;

(5)將otherObject轉(zhuǎn)換為相應(yīng)類型的變量:

ClassName other=(ClassName)otherObject;

(6)現(xiàn)在開始對所有需要比較的域進行比較。使用==比較基本類型域,使用equals比較對象域。如果所有域都匹配,就返回true,否則返回false;

return field1==other.field1&&field2.equals(other.field2)

如果在子類中重新定義equals,就要在其中包含調(diào)用super.equals(other)。如果檢測失敗,就不可能相等。如果超類中的域相等,就比較子類中的實例域。

對于數(shù)組類型的域,可以使用靜態(tài)的Arrays.equals方法檢測相應(yīng)的元素是否相等。

來看幾個字符串比較例子:

String a = "abc";
String b = "abc";
String c = new String("abc");
String d = new String("abc");
System.out.println(a == b); // true 因為JAVA中字符串常量是共享的,只有一個拷貝
System.out.println(a == c); // false a和c屬于2個不同的對象
System.out.println(a.equals(c)); // true 由于String對象的equals方法比較的是對象中的值,所以返回true。(和Object的equals方法不同)
System.out.println(c==d); // false c和d雖然對象內(nèi)的值相同,但屬于2個不同的對象,所以不相等
System.out.println(c.equals(d)); // true

java equals()方法如何使用

簡單的說,當比較字符串常量時,等于和equals返回的結(jié)果一樣,當想比較字符串對象的值時用equals。

看一個equals的使用例子:

package chapter05.EqualsTest;
  
import java.util.*;
  
public class EqualsTest {
 public static void main(String[] args) {
  Employee alice1 = new Employee("Alice Adams", 75000, 1987, 12, 15);
  Employee alice2 = alice1; // reference the same object
  Employee alice3 = new Employee("Alice Adams", 75000, 1987, 12, 15);
  Employee bob = new Employee("Bob Brandson", 50000, 1989, 10, 1);
  
  System.out.println("alice1 == alice2: " + (alice1 == alice2));
  
  System.out.println("alice1 == alice3: " + (alice1 == alice3));
  
  System.out.println("alice1.equals(alice3): " + (alice1.equals(alice3)));
  
  System.out.println("alice1.equals(bob): " + (alice1.equals(bob)));
  
  System.out.println(bob.toString());
 }
}
  
class Employee {
 public Employee(String n, double s, int year, int month, int day) {
  name = n;
  salary = s;
  GregorianCalendar calendar = new GregorianCalendar(year, month, day);
  hireDay = calendar.getTime();
 }
  
 public String getName() {
  return name;
 }
  
 public double getSalary() {
  return salary;
 }
  
 public Date getHireDay() {
  return hireDay;
 }
  
 public void raiseSalary(double byPercent) {
  double raise = salary * byPercent / 100;
  salary += raise;
 }
  
 @Override
 public boolean equals(Object otherObject) {
  // a quick test to see if the objects are identical
  if (this == otherObject)
   return true;
  
  // must return false if the explicit parameter is null
  if (otherObject == null)
   return false;
  
  // if the classed don't match,they can't be equal
  if (getClass() != otherObject.getClass())
   return false;
  
  // now we know otherObject is a non-null Employee
  Employee other = (Employee) otherObject;
  
  // test whether the fields hava identical values
  return name.equals(other.name) && salary == other.salary
    && hireDay.equals(other.hireDay);
  
 }
  
 @Override
 public int hashCode() {
  return 7 * name.hashCode() + 11 * new Double(salary).hashCode() + 13
    * hireDay.hashCode();
 }
  
 @Override
 public String toString() {
  return getClass().getName() + "[name=" + name + ",salary=" + salary
    + ",hireDay=" + hireDay + "]";
 }
  
 private String name;
 private double salary;
 private Date hireDay;
}
  
class Manager extends Employee {
 public Manager(String n, double s, int year, int month, int day) {
  super(n, s, year, month, day);
  bouns = 0;
 }
  
 @Override
 public double getSalary() {
  double baseSalary = super.getSalary();
  return baseSalary + bouns;
 }
  
 public void setBouns(double b) {
  bouns = b;
 }
  
 @Override
 public boolean equals(Object otherObject) {
  if (!super.equals(otherObject))
   return false;
  Manager other = (Manager) otherObject;
  // super equals checked that this and other belong to the same class
  return bouns == other.bouns;
 }
  
 @Override
 public int hashCode() {
  return super.hashCode() + 17 * new Double(bouns).hashCode();
 }
  
 @Override
 public String toString() {
  return super.toString() + "[bouns=" + bouns + "]";
 }
  
 private double bouns;
}

equals() 與 == 的區(qū)別是什么?

== : 它的作用是判斷兩個對象的地址是不是相等。即,判斷兩個對象是不是同一個對象。

equals() : 它的作用也是判斷兩個對象是否相等。但它一般有兩種使用情況:

  • 情況1,類沒有覆蓋equals()方法。則通過equals()比較該類的兩個對象時,等價于通過“==”比較這兩個對象。

  • 情況2,類覆蓋了equals()方法。一般,我們都覆蓋equals()方法來兩個對象的內(nèi)容相等;若它們的內(nèi)容相等,則返回true(即,認為這兩個對象相等)。

下面,通過示例比較它們的區(qū)別。

代碼如下:

import java.util.*;
import java.lang.Comparable;
 
/**
 * @desc equals()的測試程序。
 */
public class EqualsTest3{
 
 public static void main(String[] args) {
  // 新建2個相同內(nèi)容的Person對象,
  // 再用equals比較它們是否相等
  Person p1 = new Person("eee", 100);
  Person p2 = new Person("eee", 100);
  System.out.printf("p1.equals(p2) : %s\n", p1.equals(p2));
  System.out.printf("p1==p2 : %s\n", p1==p2);
 }
 
 /**
  * @desc Person類。
  */
 private static class Person {
  int age;
  String name;
 
  public Person(String name, int age) {
   this.name = name;
   this.age = age;
  }
 
  public String toString() {
   return name + " - " +age;
  }
 
  /**
   * @desc 覆蓋equals方法
   */
  @Override
  public boolean equals(Object obj){
   if(obj == null){
    return false;
   }
 
   //如果是同一個對象返回true,反之返回false
   if(this == obj){
    return true;
   }
 
   //判斷是否類型相同
   if(this.getClass() != obj.getClass()){
    return false;
   }
 
   Person person = (Person)obj;
   return name.equals(person.name) && age==person.age;
  }
 }
}

運行結(jié)果:

p1.equals(p2) : true
p1==p2 : false

結(jié)果分析:

在EqualsTest3.java 中:

  • (1) p1.equals(p2)
    這是判斷p1和p2的內(nèi)容是否相等。因為Person覆蓋equals()方法,而這個equals()是用來判斷p1和p2的內(nèi)容是否相等,恰恰p1和p2的內(nèi)容又相等;因此,返回true。

  • (2) p1==p2
    這是判斷p1和p2是否是同一個對象。由于它們是各自新建的兩個Person對象;因此,返回false。

關(guān)于“java equals()方法如何使用”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“java equals()方法如何使用”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


文章標題:javaequals()方法如何使用
標題URL:http://weahome.cn/article/iishij.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部