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. Object 类中的 equals方法

    1 相等与同一 如果两个对象具有相同的类型以及相同的属性值,则称这两个对象相等.如果两个引用对象指的是同一个对像,则称这两个变量同一.Object类中定义的equals 函数原型为:public bo ...

  2. Java Object类中的equals方法

    Object类中的equals方法用于检测一个对象是否等于另外一个对象.在Object类中,这个方法将判断两个对象是否具有相同的引用.如果两个对象具有相同的引用,它们一定是相等的.从这点上看,将其作为 ...

  3. 25. object类中的一些方法分析

    1. Object java是面向对象语言,所以其核心思想: 找合适的对象,做合适的事 Object是所有类的终极基类.任何一个类都继承了Object类 2. Object的部分函数列表 1)Stri ...

  4. String类中的equals()方法:

    String类中的equals()方法: public boolean equals(Object anObject) { //如果是同一个对象 if (this == anObject) { ret ...

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

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

  6. Object类中常见的方法,为什么wait notify会放在Object里边

    toString():输出一个对象的地址字符串(哈希code码):可以通过重写toString方法,获取对象的属性! equals():比较的是对象的引用是否指向同一块内存地址, 重写equals() ...

  7. 第8.26节 重写Python类中的__getattribute__方法实现实例属性访问捕获

    一. 引言 在<第7.23节 Python使用property函数定义属性简化属性访问的代码实现>和<第7.26节 Python中的@property装饰器定义属性访问方法gette ...

  8. 一、基础篇--1.1Java基础-Object类中常见的方法,为什么wait notify会放在Object里边

    这是个设计相关的问题,它考察的是面试者对现有系统和一些普遍存在但看起来不合理的事物的看法.回答这些问题的时候,你要说明为什么把这些方法放在Object类里是有意义的,还有不把它放在Thread类里的原 ...

  9. Java基础:Object类中的equals与hashCode方法

    前言 这个系列的文章主要用来记录我在学习和复习Java基础知识的过程中遇到的一些有趣好玩的知识点,希望大家也喜欢. 一切皆对象   对于软件工程来说面向对象编程有一套完整的解决方案:OOA.OOD.O ...

随机推荐

  1. .clear 万能清除浮动

    html body div.clear, html body span.clear { background: none; border: 0; clear: both; display: block ...

  2. C#开发Windows服务

    Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序. 服务可以在计算机启动时自动启动,可以暂停和重新启动而且 ...

  3. 两道关于JS的小考题(闭包与中间件)

    题目一:写一个javascript函数 calculate,该函数有如下性质 calculate() = 0; calculate(2)() = 2; calculate(3)(4)(1)(5)() ...

  4. 项目分享二:APP 小红点中数字的处理

    小红点,是 APP 中最常见的一个功能,我们先来看一下面的案例,下图中,待评价的商品有 2 个,点击“评价晒单”按钮进行评价后,那么待评价数量应该变成 1,那么这个功能是如何去实现的呢? 一般来说,实 ...

  5. css+div 浮动分块

    前段时间学过几天html,只是怀着了解的态度,能够读懂别人的页面,能够扒现成就行,一直没有自己动手去实践过,其实也不是没有实践过,前段时间扒了一个网页,想按照自己的要求来改,可后果是越改越乱.今天心血 ...

  6. matlab 中randn randi rand randsrc的用法以及区别

    1,rand 生成均匀分布的伪随机数.分布在(0~1)之间 主要语法:rand(m,n)生成m行n列的均匀分布的伪随机数                      rand(m,n,'double') ...

  7. android之Activity回传数据

    约定:当Activity发生跳转时将原来的Activity成为父Activity,将新出现的Activity成为子Activity. 情景设置 下面是个发短信的Activity 当我们点击图中的+按钮 ...

  8. Failed to execute goal org.codehaus.cargo:cargo-maven2-plugin:1.2.3:run (default-cli) on project Maven_WebTest: Execution default-cli of goal org.codehaus.cargo:cargo-maven2-plugin:1.2.3:run failed: C

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  9. Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo

    更新了xcode后使用goland运行项目时提示 Agreeing to the Xcode/iOS license requires admin privileges, please re-run ...

  10. java定时器

    package com.lid;            import java.util.Calendar;      import java.util.Date;      import java. ...