Java SE:面向对象(下):Object类

Object类是面向对象(下)的一块小知识点,略微有点难以理解,不过多花点时间肯定可以掌握。

定义:Object类是所有类的父类,会默认继承Object类,即所有类的对象都可以使用Object的引用进行接收。Object类是参数的最高统一类型。

一、toString方法:【1】返回对象信息。  【2】数组转字符串。

(1):我们都知道,数组是不能直接打印,以前都是for循环打印数组内容,现在可以用toString方法打印数组的内容了,先要写一条“import java.util.Arrays;”语句,不然编译器会报错。然后给出数组,再打印toString方法就可以了。本质上说:toString方法能实现数组转字符串的功能。

(2)输出结果:

(3):获取对象信息:

 创建了一个User类,定义了两个变量name和age,并给出了一个有参构造方法,通过this关键字引用,并给出一个toString方法,用于返回对象信息。 

(4):在Main类和main方法中,通过new关键字实例化创建了一个user对象并赋值,之后直接打印user。当直接打印一个对象时,实际上会调用这个对象的toString方法,十分重要!!!

(5):输出结果:

二、equals方法:判断两个对象在逻辑上是否相等。

【1】:如果==左右两侧是基本类型变量,比较的是变量中的值是否相同。

(基本数据类型:int、short、long、byte、float、double、char、boolean,无String类!!!)

【2】:如果==左右两侧是应用类型变量,比较的是引用变量的地址是否相同。

【3】:如果要比较对象中内容,必须重写Object中的equals方法,因为equals方法默认也是按照地址来的。

(1):定义了一个Person类,然后定义了两个变量name和age,然后给出了一个有参构造方法,通过this关键字引用。

 (2):之后给出了一个equals方法,返回值类型为boolean,传入的参数类型为Object。

先if语句检查传入的参数o是否为null,如果是null就返回false。

再检查传入的对象和当前对象是否是同一个对象引用,如果不是,返回false。

最后检查传入的对象是否是Person类的实例。

接着向下转型,将对象o强制转换为Person类型,并赋值给新的变量person。最后比较名字(通过String类的equals名字)和年龄(直接使用等号比较基本数据类型)。

(3):最后的测试类Test5,通过new关键字实例化了两个Person类对象p1和p2,并分别赋值。之后给出了两个整形变量a和b,并分别赋值为10和20。

【1】:a不等于b,所以打印false。

【2】:这里的==比较的是两个引用指向的是否是同一个对象,所以打印false。

【3】:equlas方法由于p1和p2的name和age属性都不一样,所以打印false。

【4】:这里的==比较的是两个引用指向的是否是同一个对象,所以打印false。

【5】:equals方法由于p1和p3的name和age属性都一样,所以打印true。

【6】:定义了一个function方法,这个方法可以接受任何类型的对象作为参数,然后打印出这个对象。

(4):输出结果:

三、compareTo方法:用于定义对象之间的自然排序规则。

(1):定义了一个学生类,实现接口Comparable,进而实现compareTo方法。定义了两个变量name和score,给出了一个有参构造方法,并给出了一个toString方法。

(2):定义了一个compareTo方法,返回值类型为int,参数类型为Object,通过向下转型将对象o强制转换为Student型,并赋值给新的变量s。

然后if判断当前对象应排在参数对象之前,返回-1。

如果当前对象应排在参数对象之后,返回1。

如果当前对象和参数对象排名不分先后,返回0。

(3):在main方法中给出一个学生对象数组,元素进行排序(按分数降序),并给四个对象分别赋值。之后用sort方法排序,在sort方法中会自动调用compareTo方法,compareTo方法的参数类型为Object。然后调用toString方法,把数组转换为字符串,最终打印。这里的姓名无法进行排序,只能按成绩进行排序。

切记:不能只用sort方法,因为name属于String类,String类不属于基本数据类型,sort无法识别。而要先调用compareTo方法,把不是基本数据类型的按照基本数据类型的大小进行排序。

(4):输出结果:

  最终按照成绩从高到低进行排序。

四、hashCode方法:用来确定对象在内存中存储位置是否相同。

(1):hashCode要用到数据结构的相关知识,后续会有详细讲解,这里作简单阐述。

定义了一个Person类,定义了name和age变量,给出了一个有参构造方法。然后定义了一个hashCode方法,返回值类型为int,这里要导入语句 import java.util.Objects;并返回一个基于name和age参数生成的哈希码。

(2):main方法中,通过new关键字实例化三个Person类对象p1、p2、p3,其中p1的赋值信息和p3的是一样的。然后打印三者的hash值。

(3)输出结果:

从中可以看出,p1和p3在内存中存储位置相同,所以哈希值一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值