【Object类的简单介绍】

✨hello,愿意点进来的小伙伴们,你们好呐!
✨ 🐻🐻系列专栏:【JavaSE】
🐲🐲本篇内容:Object 类的简单介绍
🐯🐯作者简介:一名大一即将升大二的三非编程小白

Object类是Java默认提供的一个类。在Java中,除了Object类,其余所有类都是存在继承关系的。都会默认继承于 Object类。即所有类的对象都可以使用Object类来进行引用。比如:
1.使用Object接收类的对象:

在这里插入图片描述

对于Object类中的方法都很重要,我们今天主要挑三个方法来介绍:

  1. hashCode()
  2. equals()
  3. toString()

在这里插入图片描述
下面介绍的是企业最常用的Java8版本

1. hashCode()方法

在这里插入图片描述
在Java的文档中可以找到hashCode的介绍,“返回对象的哈希码值”
究竟什么是哈希码值呢?
让我们一起去Java源码中找答案吧
在这里插入图片描述
我们在原码中找到了hashCode的位置,该方法是被native修饰的,说明它底层是由C语言和C++编写的,我们暂时看不到底层是如何返回哈希码值的。

其实hashCode他帮我算了一个具体的对象位置,这里面涉及数据结构,但是我们还没学数据结构,没法讲述,所以我们只能说它是个内存地址。然后调用Integer.toHexString()方法,将这个地址以16进制输出。但是用hashCode原本的算法来计算,两个名字相同,年龄相同的对象就不会存储在同一位置。我们想存储在同一位置就必须重写hashCode方法。

未重写:
在这里插入图片描述
在这里插入图片描述

我们可以看到在没有重写hashCode的时候,他们的返回的哈希码值是不一样的。

重写后:
在这里插入图片描述

  1. 而重写了hashCode后,它返回的哈希码值便相同了。但是调用了Objects类的hash方法。该方法又是什么呢?我们继续来看看。

在这里插入图片描述

  1. 在hash中调用的是Arrays的hashCode方法,该方法才是重写hashCode后返回哈希码值的核心代码。

在这里插入图片描述

  1. 最后是通过该算法来得到对象的哈希码值。
    注意:
    1、hashcode方法用来确定对象在内存中存储的位置是否相同
    2、事实上hashCode() 在散列表中才有用,在其它情况下没用。在散列表中hashCode() 的作用是获取对象的散列码,进而确定该对象在散列表中的位置。

2. equals()方法

在学习equals方法之前我们应该先认识一下 ‘==’ 。

  1. 如果‘==’两端是基本类型变量,比较的是变量中的值是否相等。
  2. 如果‘==’左右两端是引用数据类型,比较的是引用变量地址是否相同。
  3. 如果要比较对象中内存是否相等,也必须重写Object中的equals方法。

1. Object中的equals方法
在这里插入图片描述

我们可以看出Object中的equals方法来比较引用数据类型时是来比较引用变量地址是否相等。当我们想比较对象中的内容时,我们应该重写equals方法。

1. 未重写:
在这里插入图片描述

这样子运行完结果为 false

2. 重写后:

class test{
    public String name;
    public int age;
    public test(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        test test = (test) o;
        return age == test.age &&
                Objects.equals(name, test.name);
    }
}
public class Test01 {
    public static void main(String[] args) {
        test test = new test("123" , 123);
        test test1 = new test("123",123);
        System.out.println(test.equals(test1));
    }
}

在这里插入图片描述

重写后比较发现两个内容相同的对象返回值为true。
在这里插入图片描述
我们也可以在它比较核心代码中修改比较逻辑。

建议在重写equals的同时也重写它的好兄弟hashCode。

原因:

  • 两个对象相等,hashCode一定相等

  • 两个对象不等,hashCode不一定不等

  • hashCode相等,两个对象不一定相等

  • hashCode不等,两个对象一定不等

3. toString()方法

在Object类中toString方法在引用类型调用时是通过对象的地址来返回处理后的值。
在这里插入图片描述

通过toHexString()来返回处理后的哈希码值。不同对象返回的值不同。
toString在打印对象名称的时候JVM底层会自己调用。所以我们经常来重写toString来方便打印。
在这里插入图片描述
在这里插入图片描述
会输出一个处理过的哈希码值。

重写后:

class test{
    public String name;
    public int age;
    public test(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        return "test{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
public class Test01 {
    public static void main(String[] args) {
        test test = new test("123" , 123);
        System.out.println(test.toString());
    }
}

会打印出:在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python 中的对象是一种数据型,它可以表示现实中的事物或概念。在 Python 中,几乎所有的数据都是对象。 对象具有属性和方法。属性是对象的特征,方法是对象能够执行的操作。例如,一个字符串对象具有属性如长度、大小写等,同时也有方法如查找、替换等。 Python 的内置对象包括数字、字符串、列表、元组、字典等。此外,Python 还允许用户自定义对象,通过定义来实现。 在 Python 中创建对象非常简单,只需要使用名加上括号即可。例如,创建一个整数对象可以使用以下代码: ``` x = 10 ``` 这个语句将创建一个整数对象,其值为 10,并将其赋值给变量 x。此时,x 是对整数对象的引用。 对象的内存管理是由 Python 解释器自动处理的,无需手动管理内存。当一个对象不再被引用时,Python 解释器会自动回收其所占用的内存空间。 对象的操作通常通过调用其方法来实现。例如,字符串对象可以使用内置方法 len() 来获取其长度: ``` s = "hello" print(len(s)) # 输出 5 ``` 在 Python 中,对象的方法可以使用点号(.)来调用。例如,以下代码调用了列表对象的 append() 方法,在列表末尾添加一个新元素: ``` lst = [1, 2, 3] lst.append(4) print(lst) # 输出 [1, 2, 3, 4] ``` 总之,对象是 Python 中非常重要的概念,掌握对象的用法可以更好地理解和使用 Python 语言。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无满*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值