Object类中的方法

简介: Object类中的方法


equals方法

源代码:

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

SUN公司设计equals方法目的?

equals方法的设计初衷是判断两个对象是否相等,但是源代码中通过“ == ” 来判断是明显不行的,通过 “ = = ”来判断的仅仅是二者的内存地址。

例如以下代码:

public class Test {
    public static void main(String[] args) {
        MyTime s1 = new MyTime(2001,1,1);
        MyTime s2 = new MyTime(2001,1,1);
        System.out.println(s1.equals(s2));
    }
}
class MyTime{
    int year;
    int month;
    int day;
    public MyTime(int year,int month,int day)
    {
        this.day = day;
        this.year = year;
        this.month = month;
    }
};

编译结果是false,仅管两个对象中存的东西是一样的,但是二者的内存地址不同。

如何使用equals方法?

在大多数情况下equals都是需要程序员自己重写的,在重写时,程序员根据自己的需求,认为对象中什么相等时,两个对象就相等。

继续使用上例,如果想认为当year相等时,两个对象就相等,那么可以这样写:

class MyTime{
    int year;
    int month;
    int day;
    public MyTime(int year,int month,int day)
    {
        this.day = day;
        this.year = year;
        this.month = month;
    }
    public boolean equals(Object obj){
       //内存地址一样,说明两个引用指向同一个对象
        if(obj == this){
            return true;
        }
        //访问子类特有属性时,需要向下转型
       if(obj instanceof MyTime) {
           MyTime obj2 = (MyTime) obj;
           return this.year == obj2.year;
       }
       return false;
    }
};

String类中对equals的重写

SUN公司在设计equals方法时希望使用者对它进行重写,因此在他们自己写的String类中已经对equals方法进行重写了。

在jdk-11.0.2中对equals进行了如下重写:

public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String aString = (String)anObject;
            if (coder() == aString.coder()) {
                return isLatin1() ? StringLatin1.equals(value, aString.value)
                                  : StringUTF16.equals(value, aString.value);
            }
        }
        return false;
    }

当想要比较两个字符串是否相等时,就可以直接调用equals方法,如下:

public class Test {
    public static void main(String[] args) {
       String s1 = "1234";
       String s2 = "1234";
        System.out.println(s1.equals(s2));
    }
}

编译结果:true

hashCode()方法

源码:

public native int hashCode();


相关文章
|
4月前
|
JavaScript 前端开发
【面试题】 JS手写ES6的Object.create方法
【面试题】 JS手写ES6的Object.create方法
|
2月前
|
设计模式 Java 调度
多案例理解Object的wait,notify,notifyAll与Thread的sleep,yield,join等方法
多案例理解Object的wait,notify,notifyAll与Thread的sleep,yield,join等方法
45 1
|
5天前
|
C#
c# 所有类的最终基类:Object
c# 所有类的最终基类:Object
5 0
|
20天前
|
XML JSON Java
作为所有类的顶层父类,没想到Object的魔力如此之大!
在上一篇博文中我们提到了Java面向对象的四大特性,其中谈及“抽象”特性时做了一个引子,引出今天的主人公Object,作为所有类的顶级父类,Object被视为是James.Gosling的哲学思考,它高度概括了事务的自然与社会行为。
53 13
|
20天前
|
存储 Java 开发者
Java Object类
Java Object类
14 0
|
27天前
|
存储 监控 开发工具
对象存储OSS产品常见问题之python sdk中的append_object方法支持追加上传xls文件如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
56 9
|
2月前
|
存储 设计模式 Python
Python中的类(Class)和对象(Object)
Python中的类(Class)和对象(Object)
32 0
|
2月前
|
JavaScript
JS之Object.defineProperty方法
JS之Object.defineProperty方法
|
4月前
|
存储 JavaScript 前端开发
【JavaScript】<面向对象Object>函数方法&对象创建&原型对象&作用域解析
【1月更文挑战第17天】【JavaScript】<面向对象Object>函数方法&对象创建&原型对象&作用域解析
|
4月前
|
Python
Python学习 -- 根类object
Python学习 -- 根类object
17 0