JAVA学习*Object类

devtools/2025/3/29 18:18:16/

Object类

Object类是所有类的父类
类中有一些方法(都需要掌握)
在这里插入图片描述

toString()方法

学习类的对象的时候有介绍过了,当我们重新给此方法就会打印类与对象的信息

equals()方法

在这里插入图片描述
在Java中的比较,
如果==左右两侧是基本类型变量,比较的是变量中值是否相同。
如果==左右两侧是引用类型变量,比较的是引用变量地址是否相同。
如果要比较引用类型指向的值相同,需要重写equals()方法。

代码展示:

java">import java.util.Objects;
public class Student {private String name;private int age;public Student(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}
java">public class Test {public static void main(String[] args) {Student stu1 = new Student("lisi",18);Student stu2 = new Student("lisi",18);System.out.println(stu1 == stu2);System.out.println(stu1.equals(stu2));System.out.println("----------");String str1 = new String("abc");String str2 = new String("abc");System.out.println(str1 == str2);System.out.println(str1.equals(str2));}
}

输出:
false
flase
----------
false
true

代码解释:

1、对于对象,== 比较的是引用,即是否指向同一内存地址。Student是类stu1和stu2是引用变量,分别引用 Student 类创建的对象。
2、用equals()方法,当没有重写equals()方法时,调用父类Object类的equals()方法,比较的是两个地址是否相同,而非指向的内容是否相同。
3、为了能比较指向的内容是否相同,需要重写equals()方法。
(可以借助编译器生成)

java">	@Override//进行了比较合理性的判断public boolean equals(Object o) {if (this == o) return true;//自己比自己if (o == null || getClass() != o.getClass()) return false;//为空和类型不相同,返回falseStudent student = (Student) o;return age == student.age && Objects.equals(name, student.name);}

此时之前的输出结果发生变化

输出:
false
true
----------
false
true

4、为什么String类的equals()方法比较的是指向的内容?因为String本身已经重写了equals()方法。

hashCode()方法

源码:

java">public native int hashCode();

我们认为两个名字相同,年龄相同的对象,将存储在同⼀个位置。当没有重写hashCode()方法时,他们的hash值不相同。
我们需要重写hashCode()方法。
(可以借助编译器生成)

java">    @Overridepublic int hashCode() {return Objects.hash(name, age);}

其他关于hashCode()方法知识后续在讲。

其他方法之后学习中介绍

总结

对于我们自定义的类时,我们最好通过编译器重写toString()方法、equals()方法等。
在这里插入图片描述


http://www.ppmy.cn/devtools/171216.html

相关文章

【VolView】纯前端实现CT三维重建-CBCT

文章目录 什么是CBCTCBCT技术路线使用第三方工具使用Python实现使用前端实现 纯前端实现方案优缺点使用VolView实现CBCT VolView的使用1.克隆代码2.配置依赖3.运行4.效果 进阶:VolView配合Python解决卡顿1.修改VtkThreeView.vue2.新增Custom3DView.vue3.Python生成s…

QT-LINUX-Bluetooth蓝牙开发

BlueToothAPI QT-BlueToothApi Qt Bluetooth 6.8.2 官方提供的蓝牙API不支持linux。 D-Bus的API实现蓝牙 确保系统中安装了 BlueZ(版本需≥5.56),并且 Qt 已正确安装并配置了 D-Bus 支持。 默默看了下自己的版本.....D-BUS的API也不支持。 在 D-Bus 中,org 目录是 D-Bus…

http代理的工作原理与功能应用

HTTP代理,全称为超文本传输协议代理,是一种在网络中经常使用的技术。它充当客户端和Web服务器之间的中间人,扮演着至关重要的角色。以下是对HTTP代理的详细讲解: 一、定义与工作原理 HTTP代理是一种位于客户端(如浏览…

(一)丶Windows安装RabbitMQ可能会遇到的问题

一丶可能会忘了配置ERLang的环境变量 二丶执行命令时报错 第一步 rabbitmq-plugins enable rabbitmq_management 第二部 rabbitmqctl status 三丶修改.erlang.cookie 文件 1.找到C盘目下的.erlang.cookie文件 C:\Users\admin\.erlang.cookie C:\Windows\System32\config\sys…

同一个局域网的话 如何访问另一台电脑的ip

在局域网内访问另一台电脑,可以通过以下几种常见的方法来实现: ‌直接通过IP地址访问‌: 首先,确保两台电脑都连接在同一个局域网内。获取目标电脑的IP地址,这可以通过在目标电脑上打开命令提示符(Windows系…

2020年全国职业院校技能大赛改革试点赛高职组“云计算”竞赛赛卷第二场次题目:容器云平台部署与运维

2020年全国职业院校技能大赛改革试点赛高职组 “云计算”竞赛赛卷 第二场次题目:容器云平台部署与运维 说明:本任务提供有2台服务器master和node,都安装了centos7.5操作系统,在/opt/centos目录下有CentOS-7-x86_64-DVD-1804系统光盘文件所有文件,在/opt/containerk8s目…

东软鸿蒙C++开发面经

一.explicit 关键字 有什么作用 首先要了解这几个概念: a .隐式转换:凡是在语境中使用了某种类型 T1 的表达式,但语境不接受该类型而接受另一类型 T2 的时候,会进行隐式转换。 b.转换构造函数 声明时不带函数说明符 explicit …

23 种设计模式中的模板模式

在父类中定义了算法的骨架,将某些步骤延迟到字类中,并允许子类在不改变算法结构的前提下重定义算法的某些特定步骤。 模板方法,主要的设计思想是,一个抽象的公开类定义了方法的框架。对于其中的一系列步骤,暂时确定不下…