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();


相关文章
|
1月前
|
Java
【Java基础面试二十】、介绍一下Object类中的方法
这篇文章介绍了Java中Object类的常用方法,包括`getClass()`、`equals()`、`hashCode()`、`toString()`、`wait()`、`notify()`、`notifyAll()`和`clone()`,并提到了不推荐使用的`finalize()`方法。
【Java基础面试二十】、介绍一下Object类中的方法
|
1月前
|
数据安全/隐私保护
作用域通信对象:session用户在登录时通过`void setAttribute(String name,Object value)`方法设置用户名和密码。点击登录按钮后,跳转到另外一个页面显示用户
该博客文章通过示例演示了如何使用session对象的`setAttribute`和`getAttribute`方法在不同页面间传递和显示用户的用户名和密码信息,并说明了如何设置会话的有效期。
作用域通信对象:session用户在登录时通过`void setAttribute(String name,Object value)`方法设置用户名和密码。点击登录按钮后,跳转到另外一个页面显示用户
|
1月前
|
前端开发 Java 编译器
【前端学java】java中的Object类和前端中的Object有什么区别(9)
【8月更文挑战第10天】java中的Object类和前端中的Object有什么区别
31 0
【前端学java】java中的Object类和前端中的Object有什么区别(9)
|
1月前
|
算法 Java
12 Java常用类(一)(内部类+object类+包装类)
12 Java常用类(一)(内部类+object类+包装类)
28 5
|
20天前
|
UED 开发工具 iOS开发
Uno Platform大揭秘:如何在你的跨平台应用中,巧妙融入第三方库与服务,一键解锁无限可能,让应用功能飙升,用户体验爆棚!
【8月更文挑战第31天】Uno Platform 让开发者能用同一代码库打造 Windows、iOS、Android、macOS 甚至 Web 的多彩应用。本文介绍如何在 Uno Platform 中集成第三方库和服务,如 Mapbox 或 Google Maps 的 .NET SDK,以增强应用功能并提升用户体验。通过 NuGet 安装所需库,并在 XAML 页面中添加相应控件,即可实现地图等功能。尽管 Uno 平台减少了平台差异,但仍需关注版本兼容性和性能问题,确保应用在多平台上表现一致。掌握正确方法,让跨平台应用更出色。
26 0
|
27天前
【Azure Developer】使用PowerShell Where-Object方法过滤多维ArrayList时候,遇见的诡异问题 -- 当查找结果只有一个对象时,返回结果修改了对象结构,把多维变为一维
【Azure Developer】使用PowerShell Where-Object方法过滤多维ArrayList时候,遇见的诡异问题 -- 当查找结果只有一个对象时,返回结果修改了对象结构,把多维变为一维
|
2月前
|
Java
Java中的Object类 ( 详解toString方法 | equals方法 )
Java中的Object类 ( 详解toString方法 | equals方法 )
|
3月前
|
Java
【Java】Object类简单解析
【Java】Object类简单解析
38 1
|
3月前
|
前端开发 JavaScript Java
Java基础10-深入理解Class类和Object类(二)
Java基础10-深入理解Class类和Object类(二)
38 5
|
3月前
|
Java C++
Java基础10-深入理解Class类和Object类(一)
Java基础10-深入理解Class类和Object类(一)
45 4