搜索
首页Javajava教程Java中Object类的方法分析

声明

文章均为本人技术笔记,转载请注明出处https://segmentfault.com/u/yzwall

Object类简介

Object类是所有类的父类,在Java中只有基本数据类型不是对象。对于所有数组类型(对象类型&&基本数据类型数组)都继承于Object类;

equals方法

Object类中通过判断两个对象是否具有相同引用,从而判断两个对象是否相同;
子类只要重写equals方法,就必须重写hashCode方法

// in java.lang.Object
public boolean equals(Object obj) {
    return (this == obj);
}

重写equals方法原则:

  • 自反性:A.equals(A)返回true;

  • 对称性:A.equals(B)结果和B.equals(A)相同;

  • 传递性:A.equals(B)为true,B.equals(C)为true,则A.equals(C)为true

  • 一致性:对于非null引用A,B, 只要equals()比较操作所用到对象信息不变,多次调用A.equals(B),结果一致;

  • 对于任何非null引用,x.equals(null)必须返回false;

  • 重写equals方法时,参数类型必须为Object类型

重写equals方法示例

class myObject {
    private String name;
    private int age;
    ...
    public getName() {
        return this.name;
    }
    public getAge() {
        return this.age;
    }
}

/**
 * 重写equals方法demo步骤
 * Effective Java中推荐方式
 */
public boolean equals(Object x) {
    // 1. 检查x和this是否引用同一个对象
    if (x == this) {
        return true;
    }
    
    // 2. 检查x对象类型是否是myObject派生
    if (!(x instanceof myObject)) {
        return false;
    }

    // 3. 比较数据域
    // 经过1,2检查,将参数转换为正确类型
    myObject o = (myObject)(x);
    return this.name.equals(x.getName()) && this.age == (x.getAge());
}

hashCode()方法

hashCode方法返回对象的散列码,相等对象必须返回相等的hashCode,不同对象的hashCode尽可能不相等

// in java.lang.Object
public native int hashCode();

重写equals时总要重写hashCode

  • 重写equals不重写hashCode,会导致“不相等对象拥有相同的hashCode”,导致集合类HashMapHashSetHashtable无法工作;极端情况下,在散列表中使所有对象的hashCode都相等,所有对象都被映射到同一个桶中,散列表退化成链表;

  • 当两个对象调用equal返回true,则两个对象各自调用hashCode()返回相同hashCode;

  • 当两个对象调用equal返回false, 两个对象各自调用hashCode()返回的hashCode可以相同(散列冲突不能完全避免

toString()方法

Object类中toString方法,输出对象的“对象类名@散列码”;


Java Object类方法分析


声明

文章均为本人技术笔记,转载请注明出处https://segmentfault.com/u/yzwall

Object类简介

Object类是所有类的父类,在Java中只有基本数据类型不是对象。对于所有数组类型(对象类型&&基本数据类型数组)都继承于Object类;

equals方法

Object类中通过判断两个对象是否具有相同引用,从而判断两个对象是否相同;
子类只要重写equals方法,就必须重写hashCode方法

// in java.lang.Object
public boolean equals(Object obj) {
    return (this == obj);
}

重写equals方法原则:

  • 自反性:A.equals(A)返回true;

  • 对称性:A.equals(B)结果和B.equals(A)相同;

  • 传递性:A.equals(B)为true,B.equals(C)为true,则A.equals(C)为true

  • 一致性:对于非null引用A,B, 只要equals()比较操作所用到对象信息不变,多次调用A.equals(B),结果一致;

  • 对于任何非null引用,x.equals(null)必须返回false;

  • 重写equals方法时,参数类型必须为Object类型

重写equals方法示例

class myObject {
    private String name;
    private int age;
    ...
    public getName() {
        return this.name;
    }
    public getAge() {
        return this.age;
    }
}

/**
 * 重写equals方法demo步骤
 * Effective Java中推荐方式
 */
public boolean equals(Object x) {
    // 1. 检查x和this是否引用同一个对象
    if (x == this) {
        return true;
    }
    
    // 2. 检查x对象类型是否是myObject派生
    if (!(x instanceof myObject)) {
        return false;
    }

    // 3. 比较数据域
    // 经过1,2检查,将参数转换为正确类型
    myObject o = (myObject)(x);
    return this.name.equals(x.getName()) && this.age == (x.getAge());
}

hashCode()方法

hashCode方法返回对象的散列码,相等对象必须返回相等的hashCode,不同对象的hashCode尽可能不相等

// in java.lang.Object
public native int hashCode();

重写equals时总要重写hashCode

  • 重写equals不重写hashCode,会导致“不相等对象拥有相同的hashCode”,导致集合类HashMapHashSetHashtable无法工作;极端情况下,在散列表中使所有对象的hashCode都相等,所有对象都被映射到同一个桶中,散列表退化成链表;

  • 当两个对象调用equal返回true,则两个对象各自调用hashCode()返回相同hashCode;

  • 当两个对象调用equal返回false, 两个对象各自调用hashCode()返回的hashCode可以相同(散列冲突不能完全避免

toString()方法

Object类中toString方法,输出对象的“对象类名@散列码”;



以上是Java中Object类的方法分析的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具