Object类

Object类

Object是Java默认提供的一个类。Java里面除了object类,所有的类都是存在继承关系的。默认会继承Object父类。即所有类的对象都可以使用Object的引用进行接收(向上转型)。
总结:所有类的父类
在这里插入图片描述在这里插入图片描述

toString方法

开始推理toString的功能:

  1. 首先我们打印了对象,结果输出了demo.Animal@1b6d3586
    简单分析一下:demo是包名,Animal是类名,那@1b6d3586是什么东西呢
    在这里插入图片描述2. 然后查看一些println这个方法是怎么运行滴!
    简单分析一下:接收的实参是父类类型(Object),那String.valueOf是什么作用的方法呢
    在这里插入图片描述在这里插入图片描述3. 查看了valueOf方法里面是条件语句
    简单解释一下:如果var0不为空,则执行toString方法
    在这里插入图片描述4. 查看了toString方法里面是返回这条语句,突然发现这个很像我们刚开始打印对象的格式。

在这里插入图片描述
在这里插入图片描述

this.getClass().getName() + “@” + Integer.toHexString(this.hashCode());

回到我们一开始的问题这串@1b6d3586数字是什么东西
答:对应上面返回的来看这串数字应该是由hasCode()获得出来的,该方法返回的是对象的哈希值,是16进制的。——可以理解为对象存在的地址

哈哈哈!所以toString方法可以用来打印对象的信息,做法:在类中重写toString方法,在main方法中打印对象,运行结果就会输出重写toString方法中返回的东西
在这里插入图片描述快捷键:右键——>Generate
在这里插入图片描述

equals方法

从字面上看,equals英语意思是相同的、相等的。显而易见,这个方法的作用应该是作比较!
因此我在这里就有个疑惑了这个方法是怎么比较的?

因此我敲出以下代码进行比较:
在这里插入图片描述在这里插入图片描述当这里的时候,我和大家心里都是一个大大的问号“?”
第一个大家都理解,就是基本数据类型,比较的是变量中值是否相同,肯定是true。
第二个分析一下,a1和a2是两个不同的对象,所以存在不同的位置(哈希值不同),因此返回的是false
在这里插入图片描述

第三个,就是我们今天需要学习的equals方法,但是对应的成员变量的值是相同的,那为什么这里是false呢?
我们简单看一下equals方法

public boolean equals(Object var1) {
return this == var1;//使用引用中的地址直接来进行比较
}

原来如此,equals方法本质还是比较地址,因此打印false。
为了能将equals方法改成能判断对象内容是否相同——重写equals
以下是系统按照成员变量重写的方法——真复杂
在这里插入图片描述这时候输出的就是true了
在这里插入图片描述
系统的太复杂啦,咱自己写!
在这里插入图片描述结论:比较对象中内容是否相同的时候,一定要重写equals方法

hashcode方法

回忆一下toString方法的源码:
在这里插入图片描述hashcode()这个方法,帮我们算了一个具体的对象位置存在,这里涉及了数据结构,但是现在还没有学的很深,没法描述,所以我们只能说它是个内存地址。然后调用Integer.toHexString()方法,将这个地址以16进制输出。
在这里插入图片描述在这里插入图片描述注意事项:两个对象的hash值不一样。
像重写equals方法一样,我们也可以重写hashcode()方法。此时我们再来看看。
在这里插入图片描述

在这里插入图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值