java 中类库的根类 Object 与 toString() 和 equals() 方法

JDK 类库的根类:Object
1、这个根类中的方法我们需要先研究一下,因为这些方法都是所有子类通用的。
任何一个类默认继承Object。就算没有直接继承,最终也会间接继承。
2、Object 类当中有哪些常用的方法?
我们去哪里找这些方法呢?
第一种:去源代码当中。
第二种方法:去查阅java的类库的帮助文档。

package java.lang;

public class Object {

private static native void registerNatives();
static {registerNatives();
}
public final native Class<?> getClass();
public native int hashCode();
public boolean equals(Object obj) {return (this == obj);
}
protected native Object clone() throws CloneNotSupportedException;
public String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
public final native void notify();
public final native void notifyAll();
public final native void wait(long timeout) throws InterruptedException;

public final void wait(long timeout, int nanos) throws InterruptedException {
if (timeout < 0) {
throw new IllegalArgumentException(“timeout value is negative”);
}

    if (nanos < 0 || nanos > 999999) {throw new IllegalArgumentException("nanosecond timeout value out of range");}if (nanos > 0) {timeout++;}wait(timeout);
}
public final void wait() throws InterruptedException {wait(0);
}
protected void finalize() throws Throwable { }

}

目前为止我们只需要知道这几个方法即可:
protect Object clone() 负责对象克隆的。
int hashCode() 获取对象哈希值的一个方法。
boolean equals(Object obj) 判断两个对象是否相等
String toString() 将对象转换成字符串形式
protected void finalize() 垃圾回收器负责调用的方法

关于 Object 类中的 toString() 方法
1、源代码长什么样?
public String toString(){
return this.getClass().getName() + “@” + Integer.toHexString(hashCode());
}
源代码上 toString() 方法的默认实现是:
类名@对象的内存地址转换为十六进制的形式
2、SUN 公司设计 toString() 方法的目的是什么?
toString() 方法的作用是什么?
toString() 方法的设计目的是:通过调用这个方法可以将一个“java对象”转换成“字符串表现形式”
3、其实 SUN 公司开发 java 语言的时候,建议所有的子类都去重写 toString() 方法。
toString() 方法应该是一个简洁的、详实的、易阅读的方法。

关于 Object 类中的 equals 方法
1、equals 方法的源代码
public boolean equals(Object obj){
return (this == Obj);
}
以上这个方法是 Object 类的默认实现。
2、SUN 公司设计 equals 方法的目的是什么?
以后编程的过程当中,都要通过 equals 方法来判断两个对象是否相等。
equals 方法是判断两个对象是否相等的。
3、我们需要研究一下 Object 类给的这个默认的 equals 方法够不够用!!!!
在 Object 类中的 equals 方法当中,默认采用的是“”判断两个 java 对象是否相等。
而“
”判断的是两个 java 对象的内存地址,我们应该判断两个 java 对象的内容是否相等。
所以 Object 的 equals 方法不够用,需要子类重写 equals。
4、判断两个 java 对象相等,不能使用“”,因为“”比较的是两个对象的内存地址。

java 语言当中的字符串 String 有没有重写 toString() 方法,有没有重写 equals() 方法?
两个都有重写。

比较两个字符串能不能使用双等号?不能,必须调用equals方法。
原因:
首先,我们所说的两个字符串是否相等,是指字符串字面量是否相等,如果使用来判断两个字符串是否相等,那么实际比较的是两个字符串的存储地址(即内存地址)是否相等.那么如果使用来比较两个字符串究竟会有什么问题,我们来举例说明,如下:
String str1 = “Hello World”;
String str2 = “Hello World”;
System.out.println(str1 == str2);
两个字符串相等,虽然他们不是同一对象,但是由于java编译器能够让字符串共享,实际两个字符串变量都指向同一个"Hello world",因此输出结果为true.
如果虚拟机始终将相同的字符串共享,就可以使用运算符来检测是否相等,而通过+或substring等操作得到的字符串并不共享,因此不能使用来比较两个字符串是否相等,错误示例如下:
String str3 = “hello”;
String str4 =str3+“”;
System.out.println(str3 == str4);
虽然str3与str4相等,但是由于str4进行了+操作,造成字符串不能共享,所以输出结果为false
————————————————
版权声明:本文为CSDN博主「姑苏_IT」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43282511/article/details/105698765
总结:
1、String 类已经重写了 equals 方法,比较两个字符串不能使用 ,必须使用 equals。equals 是通用的。
2、String 类已经重写了 toString 方法。
大结论:
java 中什么类型的数据可以使用“
”判断
java 中基本数据类型比较是否相等,使用 ==
Java 中什么类型的数据需要使用 equals 判断
java 中所有的引用数据类型统一般使用 equals 方法来判断是否相等。

toString() 方法
以后所有类的 toString() 方法是需要重写的。重写规则,越简单越明了就好。
System.out.println(yiny); 这里会自动调用“引用”的 toString() 方法。
String 类是SUN写的,toString 方法已经重写了。

equals() 方法
以后所有类的 equals 方法也需要重写,因为 Object 中的 equals 方法比较的是两个对象的内存地址,
我们应该比较内容,所以需要重写。
重写规则:自己定义,主要看是什么和什么相等是表示两个对象相等。
基本数据类型比较使用:==
对象和对象比较调用:equals方法
String 类是SUN编写的,所以 String 类的 equals 方法重写了。
以后判断两个字符串是否相等,最好不要使用 ==,要调用字符串对象的 equals 方法。

if(obj == null || !(obj instanceof User)) return false;
if(this == obj) return true;
if(用户名相同 && 家庭住址相同){
return true;
}
return false;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/612021.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Centos7升级openssl到openssl1.1.1

Centos7升级openssl到openssl1.1.1 1、先查看openssl版本&#xff1a;openssl version 2、Centos7升级openssl到openssl1.1.1 升级步骤 #1、更新所有现有的软件包列表并安装最新的软件包&#xff1a; $sudo yum update #2、接下来&#xff0c;我们需要从源代码编译和构建OpenS…

java基本类型与包装类型之间的关系

JAVA基本类型和包装类型 前言 Java语言中的数据类型分为基本数据类型和引用类型&#xff0c;而我们进行Java开发的时候都听说过基本数据类型和包装类型&#xff0c;今天我们就来详细聊一聊Java中的基本数据类型和包装类型之间的区别。 基本数据类型 Java中的基本数据类型一共有…

网工内推 | 上市公司网工,NP认证优先,最高15薪+项目奖金

01 广东轩辕网络科技股份有限公司 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1、主要负责教育行业园区网的有线及无线网络项目的实施、维护、巡检等工作&#xff1b; 2、协助windows/linux平台服务器OS的安装、部署、配置与维护&#xff1b; 3、协助服务器、存储、…

Fluids —— Minimal fluid setups

目录 Waterline FLIP Boundary Boundary flow 创建流体设置的三个基本方法&#xff1b; Waterline 由FLIP Container SOP与FLIP Solver SOP组成的基本network&#xff0c;可不需要任何外部源&#xff1b; FLIP Container SOP&#xff0c;能使用不同的容器形状&#xff1b;F…

vue element plus Virtualized Select 虚拟化选择器

TIP 这个组件目前在测试当中&#xff0c;如果在使用中发现任何漏洞和问题&#xff0c;请在 GitHub 中提交 issue 以便我们进行处理。 TIP 在 SSR 场景下&#xff0c;您需要将组件包裹在 <client-only></client-only> 之中 (如: Nuxt) 和 SSG (例如: VitePress).…

真心建议,幼师姐妹刷到一定要存下啊

幼师姐妹还不知道&#xff1f;但凡早点发现这个好东西&#xff0c;我也不至于天天加班写各种报告了啊&#xff0c;真的写什么都行&#xff0c;什么总结&#xff0c;教案&#xff0c;评语&#xff0c;日报等等 都能写啊&#xff01;&#xff01;&#xff01;

2024年1月10日最热AI论文Top5:DebugBench、AI智能体对齐、开放域问答系统、谈判游戏、联邦学习

本文整理了今日发表在ArXiv上的AI论文中最热门的TOP5。 论文热度排序、论文标签、中文标题、推荐理由和论文摘要均由赛博马良平台&#xff08;saibomaliang.com&#xff09;上的智能体 「AI论文解读达人」 提供。 如需查看其他热门论文&#xff0c;欢迎移步 saibomaliang.com…

使用FFmpeg+EasyDarwin搭建音视频推拉流测试环境

1. 前言 在上一篇文章《使用VS2017在win10 x64上编译调试FFmpeg&#xff08;附源码和虚拟机下载&#xff09;》中&#xff0c;我们讲解了如何搭建FFmpeg源码编译和调试环境。 调试FFmpeg&#xff0c;还需要搭建流媒体服务器。流媒体服务器的作用是通过网络对外提供音视频服务…

前端插件库-VUE3 使用 JSEncrypt 插件

JSEncrypt 是一个用于在客户端进行加密的 JavaScript 库。它基于 RSA 加密算法&#xff0c;可以用于在浏览器中对数据进行加密和解密操作。 以下是使用 JSEncrypt 进行加密和解密的基本示例&#xff1a; 第一步&#xff1a;安装 JSEncrypt 首先&#xff0c;你需要引入 JSEn…

LeetCode 2696.删除子串后的字符串最小长度:栈

【LetMeFly】2696.删除子串后的字符串最小长度&#xff1a;栈 力扣题目链接&#xff1a;https://leetcode.cn/problems/minimum-string-length-after-removing-substrings/ 给你一个仅由 大写 英文字符组成的字符串 s 。 你可以对此字符串执行一些操作&#xff0c;在每一步操…

export default 和exprot

1.默认导入和默认导出 语法: export default {需要输出的内容} 接收: import 成员变量的名字 from 文件夹的路径 案例&#xff1a; a.mjs文件夹下默认导出 export default{a:10,b:20,show(){console.log(123);} } 在b.mjs文件中用成员变量进行接收 import AA from &q…

vue上传文件时显示上传进度

要在Vue中显示文件上传进度&#xff0c;可以使用axios库来处理文件上传&#xff0c;并使用axios的onUploadProgress方法获取上传进度。 首先&#xff0c;确保你已经安装了axios库。可以使用npm或yarn安装&#xff0c;在终端中运行以下命令&#xff1a; npm install axios或者…

Vue 自定义仿word表单录入之单选按钮组件

因项目需要&#xff0c;要实现仿word方式录入数据&#xff0c;要实现鼠标经过时才显示编辑组件&#xff0c;预览及离开后则显示具体的文字。 鼠标经过时显示 正常显示及离开时显示 组件代码 <template ><div class"pager-input flex border-box full-width fl…

【Java】多pdf文件合并为一个.docx文件

当将多个 PDF 文件合并成单个 DOCX 文档时&#xff0c;利用 Java 中的 Apache PDFBox 和 Apache POI 库可以实现这一目标。这个过程可以分为几个步骤&#xff1a; 1. 导入所需的库 使用 Apache PDFBox 和 Apache POI 库来处理 PDF 和 DOCX 文件。你需要导入相关库&#xff0c…

Python快速排序

快速排序是一种常用的排序算法&#xff0c;它通过递归地将数组分割成较小的子数组&#xff0c;然后对这些子数组进行排序&#xff0c;最终将它们合并成一个有序的数组。具体步骤如下&#xff1a; 1. 选择一个基准元素&#xff0c;通常是数组中的第一个元素。 2. 将数组分成两部…

Arthas CPU 火焰图技术 简谈

1.基础命令 help 作用 查看命令帮助信息&#xff0c;可以查看当前 arthas 版本支持的指令&#xff0c;或者查看具体指令的使用说明。cat 作用 打印文件内容&#xff0c;和linux里的cat命令类似&#xff0c;如果没有写路径&#xff0c;则展示当前目录下的文件 使用参考 cat /t…

Linux离线安装MySQL(rpm)

目录 下载安装包安装MySQL检测安装结果服务启停MySQL用户设置 下载安装包 下载地址&#xff1a;https://downloads.mysql.com/archives/community/ 下载全量包如&#xff1a;(mysql-8.1.0-1.el7.x86_64.rpm-bundle.tar) 解压&#xff1a;tar -xzvf mysql-8.1.0-1.el7.x86_64.…

web前端案例之抽奖

使用HTMLJavascript完成抽奖案例 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>*{margin: 0;padding: 0;}</style></head><body><div id"container" onclic…

js中的Date对象常用方法总结

近期业务上涉及到很多与时间有关系的地方&#xff0c;写个总结。 这里写目录标题 日期的定义时间戳时间戳和一般时间的相互转换从日期中获取值日期之间的计算 日期的定义 首先&#xff0c;用js定义时间的方法&#xff0c;一共有四种&#xff1a; console.log(new Date()) //…

xinput1_4.dll缺失了怎么办?快速修复xinput1_4.dll文件的方法指南

在快速发展的数字时代&#xff0c;电子设备尤其是电脑成为了我们生活工作中必不可少的工具。然而&#xff0c;在使用过程中&#xff0c;我们可能会遇到各式各样的技术问题&#xff0c;其中一个常见问题是系统提示缺少 xinput1_4.dll文件。这个错误通常会在你尝试运行一个游戏或…