Object类的常用方法
Object类是Java中所有类的始祖。如果没有明确的指定继承,则默认继承Object类。在Java中除了基本类型外都是Object类型的对象,包括数组。
1)equals方法
Object:
 public boolean equals(Object obj) {
        return (this == obj);
    }
在不重写此方法的情况下,默认比较两个对象是否指向同一对象。在实际开发中通常要重写此方法,根据属性来比较二者是否相等。
编写equals(Object other)方法的建议:
- 检测this和other是否引用同一个对象,若是,则显然两者相等,返回true。
- 检测other是否为null,若是,则返回false。
- 检测this和other的Class是否相同,若不是,则返回false。
- 根据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类的常用方法的更多相关文章
- 【转载】JAVA基础复习与总结<三> Object类的常用方法
		Object类是一个特殊的类,是所有类的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类.这里主要总结Object类中的三个常用方法:toString().equ ... 
- Object类及其常用方法简介
		https://www.cnblogs.com/wxywxy/p/6740277.html Object类是一个特殊的类,是所有类的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认 ... 
- Object类和常用方法
		Object类是java语言的根类,要么是一个类的直接父类,要么就是一个类的间接父类.所有对象(包括数组)都实现这个类的方法. 引用数据类型:类/接口/数组,引用数据类型又称之位对象类,所谓的数组变量 ... 
- Eclipse的使用与Oblect类的常用方法_DAY11
		一.Java开发工具的使用 A:notepad windows自带的记事本. B:高级记事本 Editplus Notepad++ UE sublime2 C:集成开发工具(IDE) 开发和运行. E ... 
- Java 常用对象-Object类
		2017-10-31 23:42:08 Object类:类 Object 是类层次结构的根类.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法. 或者说,每个类都直接或者间 ... 
- 菜鸡的Java笔记 Object 类
		Object 类 Object类 的主要作用 Object 类的常用方法 内容 虽然有了对象的向上转型,可以解决了参数的统一问题,但是 ... 
- 包和访问权限修饰符,.单例设计模式,.Object类常用方法,.内部类
		1.包和访问权限修饰符 1.1 包 为什么要导包? 将字节码文件(.class)文件进行分类存放 --->包 其实就是文件夹 import java.util.Arrays; 包的划分规则 方案 ... 
- AJPFX关于Java Object类常用方法小总结
		java.lang.Object java.lang包在使用的时候无需显示导入,编译时由编译器自动导入. Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类. Object类 ... 
- 写出java.lang.Object类的六个常用方法
		java是面向对象的语言,而Object类是java中所有类的顶级父类(根类). 每个类都使用Object类作为超类,所有对象(包括数组)都实现这个类的方法,即使一个类没有用extends明确指出继承 ... 
随机推荐
- requirej入门(二)
			requirejs中的一些基本知识,包括API使用方式等. 基本API require会定义三个变量:define,require,requirejs,其中require === requirejs, ... 
- socket阻塞与非阻塞情况下的recv、send、read、write返回值 以及epool_wait返回值学习
			https://www.cnblogs.com/longingforlife/p/3289976.html 
- visual stdio使用
			现在转换使用visual stdio,因为很多和以前的快捷键不同,也不打算换了,这样可移动性应该更好吧. 1.注释代码, 首先按下ctrl + k,然后再按下ctrl + c 2.取消注释,首先按下c ... 
- 3n+1猜想
			1001. 害死人不偿命的(3n+1)猜想 (15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 卡拉兹(Ca ... 
- Mongodb~连接串的整理
			mongodb连接串可以分为普通开放的,带全局用户名和密码的,为指定数据库指定用户名密码的等. 普通开放连接 mongodb://localhost:27017 带全局用户密码的 mongodb:// ... 
- linux下Python2.7编译安装PyQt5
			---作者吴疆,未经允许,严禁转载,违权必究--- ---欢迎指正,需要源码和文件可站内私信联系--- -----------点击此处链接至博客园原文----------- 功能说明:在ubuntu系 ... 
- 错误处理(Operation Result)方法
			自己开发的公众号,可以领取淘宝内部优惠券 问题 现在有一个FileStorageService类,继承自IStorageService,具体实现如下 public interface IStorage ... 
- 使用Zxing生成一维码和二维码
			首先引用zxing.dll 到项目中引用 using System; using System.Collections.Generic; using System.Drawing; using Sys ... 
- 批量删除QQ空间说说
			第一步:用电脑打开浏览器登录你的QQ空间 第二步:点击你的说说栏目 第三步:按下电脑的F12键或者点击右上角的菜单一栏,点击开发者工具 第四步:看到右半边屏幕,找到一个叫Console的菜单,并且点击 ... 
- windows常用命令行总结
			cmd下的命令行 1.查看当前目录下的子目录 dir 或 dir /b 类似Linux 下的 ls 或者 ls -l 2.盘符切换 d: 3.进入目录 cd [目录名] 退一个目录 cd .. ... 
