Object类是Java中所有类的始祖。如果没有明确的指定继承,则默认继承Object类。在Java中除了基本类型外都是Object类型的对象,包括数组。

1)equals方法 

Object:

 public boolean equals(Object obj) {
        return (this == obj);
    }

在不重写此方法的情况下,默认比较两个对象是否指向同一对象。在实际开发中通常要重写此方法,根据属性来比较二者是否相等。

编写equals(Object other)方法的建议:

  1.  检测this和other是否引用同一个对象,若是,则显然两者相等,返回true。
  2.  检测other是否为null,若是,则返回false。
  3.  检测this和other的Class是否相同,若不是,则返回false。
  4.  根据this和other的属性是否都相同,若是,则返回true,否则,返回false。

Demo:

  @Override
    public boolean equals(Object obj) {
        System.out.println(this);
        if(this == obj){
            return true;
        }

        if(obj == null){
            return false;
        }

        if(this.getClass() != obj.getClass()){
            return false;
        }
        //确认obj是Employee的非空对象
        Employee other = (Employee) obj;

        return Objects.equals(this.name,other.name) && this.salary == other.salary
                && Objects.equals(this.hireDay,other.hireDay);

    }

这是String的equals():

public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

由此可以看出字符串的equals方法是先检测二者引用,再检测二者字符串的长度,最后再逐字符比较得出结果。

2)hashCode方法:

hash code即散列码是由对象导出的一个整型值。每个对象都有个hash code,默认是该对象的存储地址。因此两个不同的对象,其hash code一般是不同的,除非重写此方法。

String的hashCode():

public int hashCode() {
        int h = hash;
        if (h == 0 && value.length > 0) {
            char val[] = value;

            for (int i = 0; i < value.length; i++) {
                h = 31 * h + val[i];
            }
            hash = h;
        }
        return h;
    }

由此可以看出,只要String的值相同,即使不是同一个对象,其hash code也是相同的。

若想自己重写hashCode(),则可以考虑使用Objects.hash(Object ... object),此方法的参数是该类的属性,由此方法可以返回 一个散列码。

如果存在一个数组类型的域,可以使用Arrays.hashCode()返回散列码。

3)toString方法:

toString方法返回表示对象值得字符串。

Object的toString方法:

public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

显然,其返回值是类名+@+十六进制的hash code。

若重写toString(0方法,则大多数类都遵循这种格式:类名+一堆方括号括起来的域值。

Demo:

@Override
    public String toString() {
        return getClass().getName() + "[name=" + name + ",salary=" + salary + ",hireDay=" + hireDay + "]";
    }

另外,当打印对象时,就是打印该对象toString()的返回值。而且,当对象与一个字符串通过“+”连接时,Java会自动的调用toString()。

补充:数组也是对象,但无法重写toString(),可以使用Arrays.toString()来打印数组。

Object类的常用方法的更多相关文章

  1. 【转载】JAVA基础复习与总结<三> Object类的常用方法

    Object类是一个特殊的类,是所有类的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类.这里主要总结Object类中的三个常用方法:toString().equ ...

  2. Object类及其常用方法简介

    https://www.cnblogs.com/wxywxy/p/6740277.html Object类是一个特殊的类,是所有类的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认 ...

  3. Object类和常用方法

    Object类是java语言的根类,要么是一个类的直接父类,要么就是一个类的间接父类.所有对象(包括数组)都实现这个类的方法. 引用数据类型:类/接口/数组,引用数据类型又称之位对象类,所谓的数组变量 ...

  4. Eclipse的使用与Oblect类的常用方法_DAY11

    一.Java开发工具的使用 A:notepad windows自带的记事本. B:高级记事本 Editplus Notepad++ UE sublime2 C:集成开发工具(IDE) 开发和运行. E ...

  5. Java 常用对象-Object类

    2017-10-31 23:42:08 Object类:类 Object 是类层次结构的根类.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法. 或者说,每个类都直接或者间 ...

  6. 菜鸡的Java笔记 Object 类

    Object 类        Object类 的主要作用        Object 类的常用方法             内容        虽然有了对象的向上转型,可以解决了参数的统一问题,但是 ...

  7. 包和访问权限修饰符,.单例设计模式,.Object类常用方法,.内部类

    1.包和访问权限修饰符 1.1 包 为什么要导包? 将字节码文件(.class)文件进行分类存放 --->包 其实就是文件夹 import java.util.Arrays; 包的划分规则 方案 ...

  8. AJPFX关于Java Object类常用方法小总结

    java.lang.Object   java.lang包在使用的时候无需显示导入,编译时由编译器自动导入. Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类. Object类 ...

  9. 写出java.lang.Object类的六个常用方法

    java是面向对象的语言,而Object类是java中所有类的顶级父类(根类). 每个类都使用Object类作为超类,所有对象(包括数组)都实现这个类的方法,即使一个类没有用extends明确指出继承 ...

随机推荐

  1. vue 的watch用法

    参考转自https://www.imooc.com/article/details/id/28187 类型:{ [key: string]: string | Function | Object | ...

  2. HBase 的Get(读),Put(写),Delete(删),Scan(扫描)和Increment(列值递增)

    一.HBase介绍 1.基本概念 HBase是一种Hadoop数据库,经常被描述为一种稀疏的,分布式的,持久化的,多维有序映射,它基于行键.列键和时间戳建立索引,是一个可以随机访问的存储和检索数据的平 ...

  3. express --- session详解

    之前一直做前端相关的工作,所以不太清楚session,也没有主动了解,最近在学node,对session的认识又有所加深,故总结之. 注: 关于session的一些配置问题,可以看这里. 第一部分: ...

  4. pat1052. Linked List Sorting (25)

    1052. Linked List Sorting (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A ...

  5. Python文本数据分析与处理

    Python文本数据分析与处理(新闻摘要) 分词 使用jieba分词, 注意lcut只接受字符串 过滤停用词 TF-IDF得到摘要信息或者使用LDA主题模型 TF-IDF有两种 jieba.analy ...

  6. HDU 5446——Unknown Treasure——————【CRT+lucas+exgcd+快速乘+递推求逆元】

    Each test case starts with three integers n,m,k(1≤m≤n≤1018,1≤k≤10) on a line where k is the number o ...

  7. Http Client 源码分析

    /** * 此接口仅代表HTTP请求执行的最基本约定. * 它对请求执行过程没有任何限制或特定的细节,并将状态管理.身份验证和重定向处理的细节留给单个实现. */ public interface H ...

  8. .net 视图格式化

    昨天在做一个功能,要在界面上按照规定的格式显示一个时间,如果直接在expression那里格式化的话(如下:) @Html.DisplayFor(c => Convert.ToDateTime( ...

  9. 小程序 页面到详情的id传递

    比如电影列表页跳转到电影详情页 在movie.js获取movieId; processDoubanData: function (moviesDouban, settedKey, categoryTi ...

  10. case when then[转]

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...