Object是所有类的父亲,这个类有很多方法,我们都可以直接调用,但有些方法并不适合,例如下面的student类

 public class Student {
     //姓名、学号、年纪
     private String name;
     private int sid;
     private int age;

     //定义构造方法,给对象初始化
     public Student(){

     }
     public Student(String name,int sid,int age){
         this.name=name;
         this.sid=sid;
         this.age=age;
     }

     public String getName() {
         return name;
     }
     public void setName(String name) {
         this.name = name;
     }
     public int getSid() {
         return sid;
     }
     public void setSid(int sid) {
         this.sid = sid;
     }
     public int getAge() {
         return age;
     }
     public void setAge(int age) {
         this.age = age;
     }
 }

测试类:

 package com.cn.reequlas;
 //equals是比较2个对象是否相等,因为stu1和stu2是2个对像,在内在中是存了2个地址,所以不相同,找的是内存地址、
 public class TestStudent {
     public static void main(String[] args) {
         Student stu1=new Student("张三",1,1);
         Student stu2=new Student("张三",1,1);
                 boolean flag=stu1.equals(stu2);
         System.out.println(flag);
     }

 }        

因为对于Object类中的equals方法来讲,它是用来对比,2个对像的在内存中的地址是否相同,很显然,stu1 new了一个新地址,stu2也new了一个新地址,当然不同

而实际应用中,2个学生都叫张三,学号都一样,因为学号是唯一的,所以他俩就是同一个人来着。那么我们就得重写equals方法,当name和学号一样的时候,就是相同的一个对像咯

这里有一个知识点:instanceof

//instanceof是指obj对像属于Student
        if(!(obj instanceof Student))

添加重写后的equals方法如下:

 package com.cn.reequlas;

 public class Student {
     //姓名、学号、年纪
     private String name;
     private int sid;
     private int age;

     //定义构造方法,给对象初始化
     public Student(){

     }
     public Student(String name,int sid,int age){
         this.name=name;
         this.sid=sid;
         this.age=age;
     }

     public String getName() {
         return name;
     }
     public void setName(String name) {
         this.name = name;
     }
     public int getSid() {
         return sid;
     }
     public void setSid(int sid) {
         this.sid = sid;
     }
     public int getAge() {
         return age;
     }
     public void setAge(int age) {
         this.age = age;
     }
     //重写equlas方法,判断姓名、学号相等,就是同一个学生
     //obj是给我们的一个学生对像
     //this是我们自己的学生对像equals

     public boolean equals(Object obj){
         boolean flag=false;
         //判断对像是否相同,基本是不可能的
         if(obj==this){
             flag=true;
         }
         //
         if(!(obj instanceof Student)){
             flag=false;
         }else{
             Student stu=(Student)obj;
             if(stu.name.equals(this.name) && stu.sid==this.sid){
                 flag=true;
             }
         }
         System.out.println(flag);
         return flag;
     }
 }

测试类不变,输出结果就是true

package com.cn.reequlas;
//equals是比较2个对象是否相等,因为stu1和stu2是2个对像,在内在中是存了2个地址,所以不相同,找的是内存地址、
public class TestStudent {
    public static void main(String[] args) {
        Student stu1=new Student("张三",1,1);
        Student stu2=new Student("张三",1,1);
        /*Pet pet=new Pet("张三",1,1);*/
        //使用重写后的equlas方法,第1个if里面,判断对像是否相同,这个(stu1)就是是obj,stu1是this
        /*boolean flag1=stu1.equals(stu1);
        System.out.println(flag1);
        */
        //验证Student类中重写object方法的第2个if,不是同等类型
        /*boolean flag2=stu1.equals(pet);
        System.out.println(flag2);*/
        //验证Student类中重写object方法的第2个if中的else
        /*boolean flag4=stu1.getName().equals(stu2.getName());
        System.out.println(flag4);

        boolean flag5=stu1.getSid()==(stu2.getSid());
        System.out.println(flag5);*/

        boolean flag=stu1.equals(stu2);
        System.out.println(flag);
    }

}

重写Object类中的equals方法的更多相关文章

  1. 【Java基础之Object类(一)】Java中Object类中的所有方法(toString、equals、hashCode、clone、finalize、wait和notify等)详解(转载)

    java中的hashcode.equals和toString方法都是基类Object的方法. 首先说说toString方法,简单的总结了下API说明就是:返回该对象的字符串表示,信息应该是简明但易于读 ...

  2. String类中的equals()方法

    在Java中,每一个对象都有一个地址空间,在这空间保存着这个对象的值. equals 比较的是值,==比较的地址以及值. 01: public class StringExample02: {03: ...

  3. C#中==与Equals方法的区别

    using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace Console ...

  4. JAVA中“==”与equals()方法区别

    equals 方法是 java.lang.Object 类的方法 有两种用法说明: ()对于字符串变量来说,使用"=="和"equals()"方法比较字符串时, ...

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

    1. 用“==”比较两个变量,如果两个变量是基本类型变量,且都是数值类,则值相等就返回true 如果两个变量是引用型变量,则两个对象的地址一样,即指向同一个对象,则返回true 2.equals:St ...

  6. JAVA中复写equals方法

    在JAVA中“==”用于比较两个引用对象的地址是否相同.但是如果我们想比较两个对象的内容是否相同,通常会覆写equals方法.equals方法用来比较两个对象的内容是否相等. package org. ...

  7. 如何在Java中避免equals方法的隐藏陷阱

    摘要 本文描述重载equals方法的技术,这种技术即使是具现类的子类增加了字段也能保证equal语义的正确性. 在<Effective Java>的第8项中,Josh Bloch描述了当继 ...

  8. Object类中getClass()

    Object类中包含一个方法名叫getClass,利用这个方法就可以获得一个实例的类型类.类型类指的是代表一个类型的类,因为一切皆是对象,类型也不例外,在Java使用类型类来表示一个类型.所有的类型类 ...

  9. 实现Square类,让其继承自Rectangle类,并在Square类增添新属性和方法,在2的基础上,在Square类中重写Rectangle类中的初始化和打印方法

    实现Square类,让其继承自Rectangle类,并在Square类增添新属性和方法,在2的基础上,在Square类中重写Rectangle类中的初始化和打印方法 #import <Found ...

随机推荐

  1. EF DbContext 并发执行时可能出现的问题

    现在许多Web项目都使用了IOC的DI注入组件.其中对象的生命周期管理是非常重要的. 有时我们为了提高请求的响应,经常在请求线程中执行多个子线程,然而忽略了EF的DbContext的生命周期管理. D ...

  2. fnc.tld学习编写

    使用 el 的过程中,需要使用到后端代码处理逻辑,这个时候我们就需要自定义 方法. 如我们后端代码定义如下: package com.rhythmk.common; public class FncH ...

  3. (转)Java API设计清单

    转自: 伯乐在线 Java API设计清单 英文原文 TheAmiableAPI 在设计Java API的时候总是有很多不同的规范和考量.与任何复杂的事物一样,这项工作往往就是在考验我们思考的缜密程度 ...

  4. cmake 编译 c++ dll 的一个例子(更新1)

    CMakeLists.txt project(xxx) add_library(xxx SHARED xxx.cpp) add_executable(yyy yyy.cpp) target_link_ ...

  5. Objective-c——UI基础开发第十一天(UICollectionView)

    一.知识点 1.UICollectionView的dataSource .delegate 2.UICollectionView多组数据和单组数据的展示 3.UICollectionView.UICo ...

  6. Range-Based for Loops

    for ( decl : coll ) { statement } where decl is the declaration of each element of the passed collec ...

  7. SAP 金额在表中的存储及货币转换因子

    场景:一个接口出问题了,SAP通过RFC将SO数据传输到Java系统,错误的将100日元传为1.00日元. 其实查看SAP透明表发现,表中存储的的确是1.00,是前台真实数据的1/100,开发接口时没 ...

  8. 71 Query Rank Min Max Successor of BST

    [本文链接] http://www.cnblogs.com/hellogiser/p/query-min-max-successor-of-bst.html [代码]  C++ Code  12345 ...

  9. 杭电1241 Oil Deposits

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission ...

  10. SharePoint 2013 开发——开发自定义操作APP

    博客地址:http://blog.csdn.net/FoxDave 自定义操作即我们所说的Ribbon和ECB(Edit Control Block),在SharePoint 2013之前,我们可以 ...