Java学习 第十四期 Oject类

1.Object类

Object是Java默认提供的一个类。Java里面除了Object类,所有的类都是存在继承关系的。默认会继承Object父类。即所有类的对象都可以使用Object的引用进行接收。
在Java中所有子类只能同时继承一个类,那所有类默认继承Object为什么还可以继承另一个类?
类似于 当前Student默认继承了Object类
在这里插入图片描述
当我们定义一个Person类让Student继承此时并不会报错在这里插入图片描述
这是因为Person默认继承了Object类Student继承了Person等于间接继承Object类。
Obeject的使用
此时我们可以知道Obeject是所有子类的父类
我们可以使用Object接收所有类的对象

class Person{}
class Student{}
public class Test {
    public static void main(String[] args) {
        function(new Person());
        function(new Student());
    }
    public static void function(Object obj) {
        System.out.println(obj);
    }
}
//执行结果:
Person@1b6d3586
        Student@4554617c

例如 向上转型
在这里插入图片描述
所以在开发之中,Object类是参数的最高统一类型。但是Object类也存在有定义好的一些方法。如下:
在这里插入图片描述
在这里插入图片描述
getClass()是返回该类的类型的方法例如
在这里插入图片描述
在这里插入图片描述
此时对象student是什么类它就返回什么类

2. 对象比较equals方法

在Java中,进行比较时:
a.如果
左右两侧是基本类型变量,比较的是变量中值是否相同
b.如果==左右两侧是引用类型变量,比较的是引用变量地址是否相同
c.如果要比较对象中内容,必须重写Object中的equals方法,因为equals方法默认也是按照地址比较的:

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

在这里插入图片描述
this == student, obj == student1
当我们直接比较连个学生时
在这里插入图片描述
此时我们定义的年龄都是10 但是结果都是
在这里插入图片描述
这是因为两者都是引用对象都是比较其地址的
此时我们要想用equals通过年龄去比较就要重写equals方法
在这里插入图片描述
此时再运行就能比较了
在这里插入图片描述
**结论:**比较对象内容是否相等时要重写equals

3. hashCode方法

由于hashCode使用c++编写的我们不能看到源代码
在这里插入图片描述
了hashCode()这个方法,他帮我算了一个具体的对象位置,这里面涉及数据结构,但是我们还没学数据结构,没法讲述,所以我们只能说它是个内存地址。然后调用Integer.toHexString()方法,将这个地址以16进制输出。
我们认为两个名字相同,年龄相同的对象,将存储在同一个位置,如果不重写hashcode()方法,我们可以来看示例
代码:
在这里插入图片描述
在这里插入图片描述
此时可以看出两个对象的地址并不一样
此时我们在所有类当中重写hashCode方法就可以了
在这里插入图片描述

在这里插入图片描述
结论:
1、hashcode方法用来确定对象在内存中存储的位置是否相同
2、事实上hashCode() 在散列表中才有用,在其它情况下没用。在散列表中hashCode() 的作用是获取对象的
散列码,进而确定该对象在散列表中的位置。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值