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. Display: table-cell实现img、文字垂直居中

    在文章开头先说明一下此方法的兼容性,IE8+以及其他现代浏览器都支持此属性. 直接献上一个demo吧 <!DOCTYPE html> <html> <head> & ...

  2. 替罪羊树模板(BZOJ1056/1862)

    #include<cstdio> #include<cstring> #include<cmath> #include<iostream> #defin ...

  3. MATLAB实现频数直方图——hist的使用

      "hist" is short for "Histogram(直方图.柱状图)". 1.N = hist(Y) bins the elements of Y ...

  4. centos安装php扩展

    我自己的方法 先卸载php 重新安装 再安装扩展 1 rpm -qa|grep php 查看php相关 2 rpm-e 名称 一个个删除,个别需要先删除其他组件才能删除, 3 再用 rpm -qa|g ...

  5. Windows10易升下载

    为了更好的帮助用户快速跨版本升级windows,退出Windows易升!在线下载,更新安装!网速快的话需要半个小时搞定! 升级完毕,如股票感觉OK.记得清理C盘Windows.old文件 01.磁盘- ...

  6. C# 反射范范的理解下

    程序进行时引入程序集.动态的调用方法属性事件. Assembly类. type类.

  7. 【摘录】某表含有N个字段超精简模糊查询方法

    SELECT * FROM  table where CONCAT(a,b,c......) like '%key%' select name from syscolumns where id=obj ...

  8. JNI系列——简便开发流程

    1.编写Java代码 2.选中工程目录--右键单击Android Tools--Add Native Support 3.输入要生成的库名 4.到工程目录中jni目录下对自动生成文件和.mk文件进行相 ...

  9. Oauth2.0 用Spring-security-oauth2 来实现

    前言: 要准备再次研究下 统一认证的功能了,我还是觉得实现统一认证 用Oauth2 最好了,所以,现在再次收集资料和记笔记. 正文: 一.概念理解 OAuth2, 是个授权协议, RFC文档见:htt ...

  10. Eclipse 中 安装 SVN 插件

    方法一:使用Eclipse 安装向导安装 1.测试所指环境  Eclipse 4.5/Mars 2.svn 插件的官方网站: http://subclipse.tigris.org 3.打开eclip ...