equals

package abstractClasses;

import java.time.LocalDate;

/**
 * Created by xkfx on 2016/12/20.
 */
public class Employee extends Person{
    private String name;
    private double salary;
    private LocalDate hireDay;

    public Employee(String name, double salary, int year, int month, int day){
        super(name);
        this.salary = salary;
        hireDay = LocalDate.of(year, month, day);
    }

    public double getSalary(){
        return salary;
    }

    public LocalDate getHireDay(){
        return hireDay;
    }

    public String getDescription(){
        return String.format("an employee with a salary of $%.2f", salary);
    }

    public void raiseSalary(double byPercent){
        double raise = salary * byPercent / 100;
        salary += raise;
    }

    public boolean equals(Object otherObject){
        if(this == otherObject)
            return true;
        // 指向同一个对象就什么事情都没有了。
        if(otherObject  == null)
            return false;
        // 所比较对象指向null也不用比了。
        if(this.getClass() != otherObject.getClass())
            return false;
        // 经以上比较可知,两个引用不指向同一个对象,并且两对象属于同类。
        Employee other = (Employee)otherObject;
        // 经过类型强制转化,才能能够访问otherObject对象具体类的实例域

        // 测试实例域是否相同
       return name.equals(other.name) && salary == other.salary && hireDay.equals(other.hireDay);
    }
}
package abstractClasses;

/**
 * Created by xkfx on 2016/12/20.
 */
public class Manager extends Employee{
    private double bonus;

    public Manager(String name){
        super(name, 0, 2016, 10, 19);
    }

    public boolean equals(Object otherObject){
        // 比较父类实例域是否相等
        if(!super.equals(otherObject))
            return false;
        // 比较子类实例域是否相等
        Manager other = (Manager)otherObject;
        return this.bonus == other.bonus;
    }
}
时间: 2024-08-07 21:16:50

equals的相关文章

equals方法的使用

对于字符串来说,使用"=="运算符和"equals()"方法来比较,其比较方式不同.==运算符用于比较两个变量本身的值,即两个对象在内存中的首地址:equals()方法比较的是两个字符串中所包含的内容是否相同.对于非字符串类型的变量来说,==运算符和equals()方法都是用来比较所指对象在堆内存中的首地址,即比较两个类类型的变量是否指向同一个对象. 例 class Test { int x=1; } public class ep3_1{ public stati

浅谈Java中的equals和==(转载)

在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String("hello"); 3 4 System.out.println(str1==str2); 5 System.out.println(str1.equals(str2)); 为什么第4行和第5行的输出结果不一样?==和equals方法之间的区别是什么?如果在初学Java的时候这个问题不弄清楚,就

Java的equals()和==的区别

Java中==就是用来比较值是否相等,equals()是父类Object提供的一个方法equals(Object obj),在Java API文档中提到: The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any non-null reference values x and y, this met

Object.equals() 方法

Object.equals() 方法: 1 public class EqualsTest1 { 2 public static void main(String[] args) { 3 //Cat c1 = new Cat(); 4 //Cat c2 = new Cat(); 5 //System.out.println(c1 == c2);//result:false 6 Cat c3 = new Cat(1,2,3); 7 Cat c4 = new Cat(1,2,3);//在重写equa

Java学习之equals和hashcode的关系

两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 答:不对,如果两个对象x和y满足x.equals(y) == true,它们的哈希码(hash code)应当相同.Java对于eqauls方法和hashCode方法是这样规定的:(1)如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同:(2)如果两个对象的hashCode相同,它们并不一定相同.当然,你未必要按照要求去做,但是如果你违背了上述原则就会

hashcode和equals

在java中,万物皆对象,所有的对象都继承于Object类,Object类有两个方法equals和hashCode.equals一般用来比较两个对象的内容是否相等,而hashCode一般用来提高容器的查询效率. public native int hashCode(); public boolean equals(Object obj) { return (this == obj); } equals在没有重写的情况下和==是一样的,对于值类型,比较的是值,对于引用类型则比较的是对象的首地址.

重写equals和hashCode方法的示例

如果一个类有自己特有的"逻辑相等",且需要以此进行比较时,那么就需要重写equals方法. 在Object的规范中,重写equals方法有下面几条通用约定: 自反性. x.equals(x) == true 对称性.if   y.equals(x) == true , then  x.equals(y) == true 传递性.if   x.equals(y) == true y.equals(x) == true , then x.equals(z) == true 一致性.如果比较

java之"equals"和"=="的区别

java中的数据类型有基本数据类型和引用数据类型. 基本数据类型包括:int,char,float,long,double,boolean,byte,short(注:String不是基本数据类型):基本数据类型之间的比较用"==". 引用数据类型包括:Integer,Char,Float,Long,Double,Boolean,Byte,Short.引用数据类型"=="比较的是他们在内存中的存放地址,equals比较的是值是否相等. 对于String和Integer

看Java中==、equals、hashCode的来龙去脉

我有一个哥们去参加了面试,面试官这样问一个Java问题: 你说一下java对象的equals方法调用什么方法呢?我这个哥们想了想,回答说"应该是比较的引用".听了这个答案之后,那个面试官摇头晃脑的说:"不对,你回答的不对,equals方法调用的是hashCode方法".于是乎,我那个技术还不错的哥们就悲壮地栽在这道题目上了. 今天晚上,西安历史上少有的热,那就好好总结一下这个题目的来龙去脉好了,也方便给后面的朋友们提个醒,不要栽在这么简单的问题上.你说这个面试官回答

java重写equals方法(重点讲解)

为什么equals()方法要重写? 判断两个对象在逻辑上是否相等,如根据类的成员变量来判断两个类的实例是否相等,而继承Object中的equals方法只能判断两个引用变量是否是同一个对象.这样我们往往需要重写equals()方法. 我们向一个没有重复对象的集合中添加元素时,集合中存放的往往是对象,我们需要先判断集合中是否存在已知对象,这样就必须重写equals方法. 怎样重写equals()方法? 重写equals方法的要求: 1.自反性:对于任何非空引用x,x.equals(x)应该返回tru