java的object类

object类

看下object类的结构:
在这里插入图片描述

Object是所有类的父类,任何类都默认继承Object。在Java中,如果没有指定父类,则默认为Object。这是因为Object类是Java中最基本的类,也是所有类的祖先

  1. public String toString()
    : 这个方法返回对象的字符串表示形式。通常,在打印对象时会调用此方法。默认实现返回对象的类名和哈希码的无符号十六进制表示形式。
  2. public boolean equals(Object obj)
    : 这个方法用于比较两个对象是否相等。根据 obj 的类型,它会执行类型转换并使用 equals() 方法比较对象的内容。如果两个对象相等,则返回 true;否则返回 false。
  3. public int hashCode()
    : 这个方法返回对象的哈希码值。哈希码是一个整数,代表了该对象在内存中的存储位置,它是根据对象的内容计算得出的。如果两个对象相等(即 equals() 方法返回 true),则它们的哈希码必须相等。
    hashcode存在主要是为了查找的快捷性,hashcode是用来在散列存储结构中确定对象的存储地址的。
  4. protected Object clone() throws CloneNotSupportedException
    : 这个方法创建并返回此对象的一个副本。如果对象所属的类不支持克隆,将抛出 CloneNotSupportedException 异常。
  5. public final Class<?> getClass()
    : 这个方法返回对象的运行时类。运行时类是对象所属的实际类的类对象。
  6. public final void notify()
    : 这个方法唤醒在此对象监视器上等待的单个线程。如果没有线程在等待,则什么也不做。
  7. public final void notifyAll()
    : 这个方法唤醒在此对象监视器上等待的所有线程。
  8. public final void wait()
    : 这个方法导致当前线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法。
  9. public final void wait(long timeout)
    : 这个方法导致当前线程等待指定的时间(以毫秒为单位)。如果在指定的时间内没有其他线程调用此对象的 notify() 方法或 notifyAll() 方法,则返回。
  10. public final void wait(long timeout, int nanos)
    : 这个方法与 wait(long timeout) 类似,但接受纳秒作为参数,以便更精确地控制等待时间。
  11. public final boolean instanceof(Class<?> cls)
    : 这个方法检查此对象是否是指定类的实例。如果是,则返回 true;否则返回 false。

一些问题和解决方案

  1. 为什么重写equals同时也要重写hashcode方法?
    Java中规定,如果两个对象相等(即equals方法返回true),那么它们的hashCode值也必须相同。如果不重写hashCode方法,那么默认情况下,每个对象的hashCode值都由其内存地址决定,这样不同的对象就有可能产生相同的hashCode值,导致在使用哈希表等数据结构时出现错误。
    因此,在重写equals方法时,也应该同时重写hashCode方法,以保证相等的对象具有相同的哈希码值,从而保证在使用哈希表等数据结构时的正确性。
  2. 怎么写hashcode?
    在 JDK 的 Integer类,Float 类,String 类等都重写了 hashCode 方法,我们自定义对象也可以参考这些类来写。比如StringLatin1的hashcode:
public static int hashCode(byte[] value) {int h = 0;for (byte v : value) {h = 31 * h + (v & 0xff);}return h;}

Integer 的hashcode:

  public static int hashCode(int value) {return value;}

比较省事的重写 hashCode 方法就是用别人的轮子

public int hashCode() {int result = 31*declaringClass.hashCode() + methodName.hashCode();result = 31*result + Objects.hashCode(classLoaderName);result = 31*result + Objects.hashCode(moduleName);result = 31*result + Objects.hashCode(moduleVersion);result = 31*result + Objects.hashCode(fileName);result = 31*result + lineNumber;return result;}public int hashCode() {return Arrays.hashCode(this.ptypes);
}
  1. 为什么 String hashCode 方法选择数字31作为乘数?
    值 31 被选择是因为它是一个奇素数。如果它是偶数并且乘法溢出,信息将会丢失,因为乘以 2 相当于移位。使用素数的优势不太明显,但它是传统的。31 的一个很好的性质是,乘法可以用移位和减法来替换以获得更好的性能:31 * i == (i << 5) - i 。现代虚拟机会自动进行这种优化。
  2. equals和 == 的区别
    == 是比较运算符,用于比较两个基本数据类型或两个对象是否相等。对于基本数据类型,它比较的是值;对于对象,它比较的是地址
    而equals()是一个方法,只能比较引用数据类型。如果对象没有覆盖equals方法,那么等价于 == 。如果对象覆盖了equals方法,则根据覆盖的equals具体实现来判断。一般是比较对象内容 。

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

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

相关文章

【UML】第16篇 活动图

目录 一、什么是活动图 二、应用场景&#xff1a; 三、绘图符号的说明&#xff1a; 四、语法&#xff1a; 五、例图 六、建模的流程 6.1 对业务流程建模时 6.2 对用例进行活动图建模时 一、什么是活动图 活动图&#xff08;Activity Diagram&#xff09;是UML中用于描…

Linux学习记录——삼십칠 传输层TCP协议(2)

文章目录 1、滑动窗口2、拥塞控制3、延迟应答4、捎带应答5、总结TCP可靠性和性能提高6、面向字节流7、粘包问题8、异常情况9、全连接、半连接 上一篇是传输层TCP协议&#xff08;1&#xff09;。本篇默认读者已经清楚TCP报头各个部分、可靠性和握手挥手的含义。 有时候会把客户…

KVM Vcpu概述

KVM Vcpu概述 Intel VTSMP系统CPU过载使用CPU模型CPU绑定和亲和性CPU优化 Intel VT Intel的硬件虚拟化技术大致分为3类&#xff1a; 1、VT-x技术&#xff1a;是指Intel处理器中的一些虚拟化技术支持&#xff0c;包括CPU中最基础的VMX技术&#xff0c;也包括内存虚拟化的硬件支…

R语言将list转变为dataframe(常用)

在R语言使用中常常遇到list文件需要转变为dataframe格式文件处理。这是需要写循环来进行转换。IOBR查看其收录的相关基因集(自备)_iobr_deg-CSDN博客 示例文件 list文件&#xff1a; 循环转换为dataframe data <- signature_tme dat <- as.data.frame(t(sapply(data, …

USB_CH340一键下载电路

目录标题 1、CH340概述2、CH340芯片特点3、CH340系列芯片4、CH340引脚定义5、CH340传统的一键下载电路5.1、Stm32串口下载5.2、ESP32串口下载5.3、注意 6、免外围电路下载 1、CH340概述 CH340是一个USB总线的转接芯片&#xff0c;可实现USB转串口或者USB转打印口。 2、CH340芯…

OFBiz RCE漏洞复现(CVE-2023-51467)

漏洞名称 Apache OFBiz 鉴权绕过导致命令执行 漏洞描述 Apache OFBiz是一个非常著名的电子商务平台&#xff0c;是一个非常著名的开源项目&#xff0c;提供了创建基于最新J2EE/XML规范和技术标准&#xff0c;构建大中型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式…

腾讯云优惠券(代金券)领取方法及最新优惠活动汇总

腾讯云作为国内领先的云计算服务提供商&#xff0c;一直致力于为用户提供优质、高效、安全可靠的云计算服务。为了回馈广大用户&#xff0c;腾讯云会不定期地推出各种优惠活动&#xff0c;其中包括优惠券的发放。本文将分享腾讯云优惠券的领取方法并汇总最新优惠活动&#xff0…

DNS 域名解析 后续(二)-----主从复制、分离解析

&#xff08;软件名 bind , 服务名 named&#xff09; bind主包 yum install bind bind-utils -y 主软件 和 配置包管理软件&#xff08;工具包&#xff09; rpm -q bind #检查是否安装dns服务 yum install bind bind-utils -y #安装dns服务,安装bind软件包 &#xff0…

函数的秘密

1. 函数的概念 在数学中我们学习过函数&#xff0c;而在C语言中其有着与数学不同的概念&#xff1a; 在C语言中&#xff0c;函数是指一组执行特定任务的语句&#xff0c;这些语句可以重复使用&#xff0c;并且可以在程序的不同部分调用。通过使用函数&#xff0c;程序员可以将…

《ARM Linux内核源码剖析》读书笔记——0号进程(init_task)的创建时机

最近在读《ARM Linux内核源码剖析》&#xff0c;一直没有看到0号进程&#xff08;init_task进程)在哪里创建的。直到看到下面这篇文章才发现书中漏掉了set_task_stack_end_magic(&init_task)这行代码。 下面这篇文章提到&#xff1a;start_kernel()上来就会运行 set_task_…

怎么取消开机密码?4个必备方法!

“每次我开机都要输入密码&#xff0c;感觉有点麻烦&#xff0c;有什么方可以快速取消开机密码的吗&#xff1f;快给我推荐推荐吧&#xff01;” 为电脑设置开机密码&#xff0c;可以更好地保护电脑中的重要数据。但是用户需要在每次开机时都输入密码。这对于部分用户来说可能是…

Python数据结构——列表

目录 一、认识Python数据结构 二、列表概述 三、列表切片 &#xff08;一&#xff09;概述 &#xff08;二&#xff09;常见形式 &#xff08;三&#xff09;特别说明 四、列表的基本操作 &#xff08;一&#xff09;创建列表 &#xff08;二&#xff09;列表元素增加…

全新加密叙事,以Solmash为代表的 LaunchPad 平台如何为用户赋能?

铭文市场的火爆带来“Fair Launch”这种全新的代币启动方式&#xff0c;Fair Launch 的特点在于其为所有人参与 Launch 带来了公平的机会&#xff0c;所有链上玩家们都需要通过先到先得的方式 Mint 资产&#xff0c;VC 在 Fair Launch 中几乎没有话语权&#xff0c;不同的投资者…

CSS伪类:为网页增添交互和样式

CSS伪类是一项强大的特性&#xff0c;它允许开发者根据不同的状态、位置和结构选择器来选择和样式化HTML元素。通过使用CSS伪类&#xff0c;我们可以为网页增添交互性、响应性和样式化效果。本文将深入探讨CSS伪类的概念、常见用法和一些实用示例。 CSS伪类是什么 CSS伪类是一…

【AI的未来 - AI Agent系列】【MetaGPT】1. AI Agent如何重构世界

上篇文章我们跑起来了第一个MetaGPT程序。本文主要学习了一下理论&#xff0c;什么是智能体&#xff0c;以及智能体如何重构世界。 0. 什么是智能体 智能体 LLM观察思考行动记忆 多智能体 智能体环境SOP评审路由订阅经济 用人话说&#xff0c;我理解的Agent&#xff1a; 智…

C#MQTT编程01--MQTT介绍

1、前言 近年来物联网的发展如火如荼已经渗透到我们生活的方方面面。从智能家居到工业自动化从智慧城市到智慧农业物联网&#xff0c;正在以前所未有的速度改变着我们的生活。 大家现在可能已经习惯了通过手机控制家里的灯光、空调和电视&#xff0c;这就是物联网在智能家居领域…

完美解决报错Please verify that the package.json has a valid “main“ entry处理方法

出现下图中的错误 &#xff0c;说明缺少main入口 解决方法&#xff1a; 1.删除 node_modules 和 package-lock.json这两个文件 2.命令行输入npm i 会重新下载包 3.重新执行检查没有报错

01循环算法

1.求小数点的某一位&#xff0c;且超出float和double的精度问题 【题目描述】 分数a/b化为小数后&#xff0c;小数点后第n位的数字是多少&#xff1f; 【输入】 三个正整数a&#xff0c;b&#xff0c;n&#xff0c;相邻两个数之间用单个空格隔开。0<a<b<100&#…

【微信小程序独立开发2】授权登录 上

前言&#xff1a;这一节设想完成的功能为进入小程序后请求授权信息&#xff0c;用户授权登录后&#xff0c;弹出宠物登记页面&#xff0c;并根据宠物类型播放背景音乐 小程序昵称头像在之前的版本获取规则为触发后弹出用户授权弹窗&#xff0c;授权后可直接获取用户头像和昵称&…

使用 CMake 和 Ninja 构建 C/C++ 项目的教程

使用 CMake 和 Ninja 构建 C/C 项目的教程 CMake 是一个跨平台的开源构建工具&#xff0c;它简化了项目的构建过程。而 Ninja 是一个快速、轻量级的构建系统&#xff0c;与 CMake 配合使用可以提高项目的构建效率。本教程将向你介绍如何使用 CMake 和 Ninja 来构建你的 C/C 项…