Java记录 -24- equals方法重写

Java equals方法重写

假如我们要求,当两个学生的id一样时就是同一个人,代码实现如下:

public class EqualsTest {
    public static void main(String[] args) {
        Student s1 = new Student(112);
        Student s2 = new Student(112);
        System.out.println(s1.equals(s2));
    }

}
class Student{
    private int id;
    public Student(int id){
        this.id = id;
    }
    
    public boolean equals(Object obj){
        if(this == obj){
            return true;
        }
        if(obj instanceof Student){
            Student s = (Student)obj;
            if(s.id == this.id){
                return true;
            }
        }
        return false;
    }
}

当我们不重写Object类的equals方法时,无法实现上面的要求,因为equals方法继承自父类Object,实现的是比较两个对象的引用地址是否一致。

我们只有重写父类Object的equals方法:当比较的两个对象是同一个时,可定是一样的;当不是同一个对象时,首先要看传进来的对象是否是学生类型,如果不是可定也是不一样,如果是则进行id比较,id相同则是同一个人。

时间: 2024-08-13 13:32:58

Java记录 -24- equals方法重写的相关文章

java中的equals()方法重写

如何java中默认的equals方法跟实际不符的话,需要重写equals方法.例如: public class TestEquals {public static void main(String[] args) { Cat c1 = new Cat (1,2,3); Cat c2 = new Cat (1,2,3); System.out.println(c1==c2); System.out.println(c1.equals(c2));}} class Cat{ int color ;  

如何重写Java中的equals方法

Java中,只有8种基本类型不是对象,例如:4种整形类型(byte, short, int,long),2种浮点类型(flout, double),boolean, char不是对象,其他的所有类型,不论是对象数组,列表等都扩展了Object类.了解学习Object中方法的设计原理和实现方式有助于更好的学习理解java语言.下面,我们首先学习一下Object中的equals方法. 判断两个对象相等时,JVM首先查找两个对象的hashCode, 如果两者hashCode不同,则返回false;如果

java中‘==’和‘equals()’方法的有趣探索

这两天在看周志明的<深入理解java虚拟机>,受益颇多,根据书中的启示,对java中'=='和'equals()'方法的区别做了一些探索. 首先,为了更快地让进入状态,我们先来所几个判断题,例程如下,请判断各个System.out.println()输出的结果. <pre name="code" class="java"> public static void main(String[] args) { Integer a =1; Integ

【转】彻底弄懂Java中的equals()方法以及与&quot;==&quot;的区别

彻底弄懂Java中的equals()方法以及与"=="的区别 一.问题描述:今天在用Java实现需求的时候,发现equals()和“==”的功能傻傻分不清,导致结果产生巨大的偏差.所以,我决定花费时间把equals()和“==”的功能彻底弄懂,前事不忘后事之师嘛,分享给大家,希望对大家理解equals()和“==”的功能有所帮助. 二.分析探索解决问题的方法:1.Object 中的equals()方法: (1)通过查找API,说明如下: equalspublic boolean equ

Java:自定义实现equals()方法

Java:自定义实现equals()方法 以常见的自定义Date类型为例,没有经验的朋友可能会觉得直接比较年月日即可,从而写出以下的实现 public class MyDate implements Comparable<MyDate> { private final int year; private final int month; private final int day; public MyDate(int year, int month, int day) { this.year

小结下java中==与equals方法

1 public class EqualsTest { 2 3 public static void main(String[] args) { 4 String s1 = "abc"; 5 String s2 = "abc"; 6 String s3 = new String("abc"); 7 String s4 = new String("abc"); 8 9 /* 10 * 首先要明确:==比较的是对象引用,即内存中的

浅谈java对象的equals方法

作为一个被问的很多的一个面试题:java中==和equals有什么区别? 网上普遍的回答都是:==比较的是内存地址,equals比较的是值. 其实这种回答是很不标准的,稍微标准一点的回答应该JDK自带的一些类对equals的实现各不同,例如 Object对象的equals的定义是这样的: public boolean equals(Object obj) { return (this == obj); } 所以在Object中==和equals是没有任何区别的. 但在String中,重写的equ

Java中“==”与equals方法的区别

1. 用“==”比较两个变量,如果两个变量是基本类型变量,且都是数值类,则值相等就返回true 如果两个变量是引用型变量,则两个对象的地址一样,即指向同一个对象,则返回true 2.equals:String类对equals进行了重写:1)若是同一个对象,返回true: 2)若不是,则比较它们的值,值相同,返回true 重写代码: public boolean equals(Object anObject) { if (this == anObject) { return true; } if

java中的equals()方法

大家都知道,在Java中,对于对象的比较,如果用“==”比较的是对象的引用,而equals才是比较的对象的内容. 一般我们在设计一个类时,需要重写父类的equals方法,在重写这个方法时,需要按照以下几个规则设计: 1.自反性:对任意引用值X,x.equals(x)的返回值一定为true.2.对称性:对于任何引用值x,y,当且仅当y.equals(x)返回值为true时,x.equals(y)的返回值一定为true;3.传递性:如果x.equals(y)=true, y.equals(z)=tr

==,equals区别和equals方法重写

java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean    他们之间的比较,应用双等号(==),比较的是他们的值.  2.复合数据类型(类)    当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false. JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义