Java equals method usage

Source: Internet
Author: User
Tags class manager

The standard Java library contains more than 150 equals methods. Here is a perfect implementation method.

1) The display parameter is named otherobject and needs to be converted to another variable named other later.
2) check whether this and otherobject reference the same object:
If (this = otherobject) return true;
This statement is just an optimization. In fact, this is a frequently used form.
3) checks whether otherobject is null. If it is null, false is returned. This check is necessary.
If (otherobejct = NULL) return false;
Compare whether this and otherobject belong to the same class. If the equals semantics changes in each subclass, use getclass Detection:
If (getclass ()! = Otherobject. getclass () return false;
If all sub-classes have uniform semantics, use instanceof for detection:
If (! (Otherobejct instanceof classname) return false;
4) convert otherobject to the corresponding class type variable:
Classname Other = (classname) otherobject;
5) Now we start to compare all the domains to be compared. Use = to compare the basic type fields, and use equals to compare the object fields. If all the domains match, true is returned; otherwise, false is returned.
Return field = Other. Field & field. Equals (other. Field )&&...;
If you re-define equals in the subclass, you need to call Super. Equals (other ).

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;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(): " + bob);Manager carl = new Manager("Carl Cracker", 80000, 1987, 12, 15);Manager boss = new Manager("Carl Cracker", 80000, 1987, 12, 15);boss.setBonus(5000);System.out.println("boss.toString(): "+ boss);System.out.println("carl.equals(boss): " + carl.equals(boss));System.out.println("alice1.hashCode(): " + alice1.hashCode());System.out.println("alice3.hashCode(): " + alice3.hashCode());System.out.println("bob.hashCode(): " + bob.hashCode());System.out.println("carl.hashCode(): " + carl.hashCode());}}class Employee{public Employee(String n, double s, int year, int month, int day){name = n;salary = s;GregorianCalendar calendar = new GregorianCalendar(year, month-1, 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;}public boolean equals(Object otherObject){//a quick test to see if the objects are identicalif(this == otherObject)return true;//must return false if the explicit parameter is nullif(otherObject == null)return false;//if the classes don't match, they can't be equalif(getClass() != otherObject.getClass())return false;//now we know otherObject is a non-null EmployeeEmployee other = (Employee)otherObject;//test whether the fields have identical valuesreturn name.equals(other.name)&& salary == other.salary&& hireDay.equals(other.hireDay);}public int hashCode(){return 7*name.hashCode() + 11*new Double(salary).hashCode()+ 13*hireDay.hashCode();}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);bonus = 0;}public double getSalary(){double baseSalary = super.getSalary();return baseSalary + bonus;}public void setBonus(double b){bonus = b;}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 classreturn bonus == other.bonus;}public int hashCode(){return super.hashCode() + 17*new Double(bonus).hashCode();}public String toString(){return super.toString() + "[bonus=" + bonus + "]";}private double bonus;}

Running result:

--------------------Configuration: <Default>--------------------alice1 == alice2: truealice1 == alice3: falsealice1.equals(alice3): truealice1.equals(bob): falsebob.toString(): Employee[name=Bob Brandson,salary=50000.0,hireDay=Sun Oct 01 00:00:00 CST 1989]boss.toString(): Manager[name=Carl Cracker,salary=80000.0,hireDay=Tue Dec 15 00:00:00 CST 1987][bonus=5000.0]carl.equals(boss): falsealice1.hashCode(): 377780067alice3.hashCode(): 377780067bob.hashCode(): 955285015carl.hashCode(): 386513600Process completed.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.