object类常见方法

/*** native 方法,用于返回当前运行时对象的 Class 对象,使用了 final 关键字修饰,故不允许子类重写。*/
public final native Class<?> getClass()
/*** native 方法,用于返回对象的哈希码,主要使用在哈希表中,比如 JDK 中的HashMap。*/
public native int hashCode()
/*** 用于比较 2 个对象的内存地址是否相等,String 类对该方法进行了重写以用于比较字符串的值是否相等。*/
public boolean equals(Object obj)
/*** native 方法,用于创建并返回当前对象的一份拷贝。*/
protected native Object clone() throws CloneNotSupportedException
/*** 返回类的名字实例的哈希码的 16 进制的字符串。建议 Object 所有的子类都重写这个方法。*/
public String toString()
/*** native 方法,并且不能重写。唤醒一个在此对象监视器上等待的线程(监视器相当于就是锁的概念)。如果有多个线程在等待只会任意唤醒一个。*/
public final native void notify()
/*** native 方法,并且不能重写。跟 notify 一样,唯一的区别就是会唤醒在此对象监视器上等待的所有线程,而不是一个线程。*/
public final native void notifyAll()
/*** native方法,并且不能重写。暂停线程的执行。注意:sleep 方法没有释放锁,而 wait 方法释放了锁 ,timeout 是等待时间。*/
public final native void wait(long timeout) throws InterruptedException
/*** 多了 nanos 参数,这个参数表示额外时间(以纳秒为单位,范围是 0-999999)。 所以超时的时间还需要加上 nanos 纳秒。。*/
public final void wait(long timeout, int nanos) throws InterruptedException
/*** 跟之前的2个wait方法一样,只不过该方法一直等待,没有超时时间这个概念*/
public final void wait() throws InterruptedException
/*** 实例被垃圾回收器回收的时候触发的操作*/
protected void finalize() throws Throwable { }

解读:

  • 被final修饰的类表示不可改变,因为所有的类都属于object类的子类,所以所有类都不能重写被final修饰的方法。
  • 在Java中,native是一个方法修饰符关键字,用于表示该方法的实现不是用Java编写的,而是用其他语言(如C或C++)编写的本地代码。这些方法通过Java本地接口(JNI)与Java虚拟机交互

Java中的值传递

  • 基本数据类型传递:修改方法内的基本类型参数不会影响原始值。

  • 引用数据类型传递:修改方法内的引用类型参数(例如数组或对象)会影响原始对象,因为副本和原始引用指向同一个对象。但是,如果尝试改变引用本身(即让副本引用另一个对象),则不会影响原始引用。对于引用类型,传递的是引用的副本(内存地址的副本)简单说:拷贝了钥匙,但开的还是同一把锁。 但正是因为传递的是内存地址的副本,再次对引用对象赋值时却不会改变引用本身。

==与equals()方法

  • 对于基本数据类型来说,== 比较的是值。
  • 对于引用数据类型来说,== 比较的是对象的内存地址。

因为 Java 只有值传递,所以,对于 == 来说,不管是比较基本数据类型,还是引用数据类型的变量,其本质比较的都是值,只是引用类型变量存的值是对象的地址。

object类的equals方法

public boolean equals(Object obj) {return (this == obj);
}
  • 没有重写equals方法时,equals方法就是==

重写后的equals方法

String 中的 equals 方法是被重写过的,因为 Objectequals 方法是比较的对象的内存地址,而 Stringequals 方法比较的是对象的值

当创建 String 类型的对象时,虚拟机会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就把它赋给当前引用。如果没有就在常量池中重新创建一个 String 对象。

public boolean equals(Object anObject) {if (this == anObject) {return true;}if (anObject instanceof String) {String anotherString = (String)anObject;int n = value.length;if (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value;int i = 0;while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}return false;
}

解读:

  1. 先比较地址if (this == anObject) → 如果是同一个对象,直接返回true (这一步是优化)

  2. 检查类型if (anObject instanceof String) → 如果不是String类型,直接返回false

  3. 比较长度if (n == anotherString.value.length) → 长度不同直接返回false

  4. 逐字符比较while循环逐个比较字符,有任何不同就返回false

  5. 全部相同:所有字符都相同,返回true

小结:

本篇博客主要介绍了object类和它的重要方法,同时介绍了Java中的值传递,进而引出equals方法,在后面解读源码时,我们还会讲一讲它和hashcode()的难解难分。希望能带给你启发!

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

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

相关文章

用深度学习(LSTM)实现时间序列预测:从数据到闭环预测全解析

用深度学习&#xff08;LSTM&#xff09;实现时间序列预测&#xff1a;从数据到闭环预测全解析 时间序列预测是工业、金融、环境等领域的核心需求——小到预测设备温度波动&#xff0c;大到预测股价走势&#xff0c;都需要从历史数据中挖掘时序规律。长短期记忆网络&#xff08…

gpu-z功能介绍,安装与使用方法

GPU-Z 功能介绍、安装与使用方法 一、核心功能 硬件信息检测 识别显卡型号、制造商、核心架构&#xff08;如NVIDIA Ada Lovelace、AMD RDNA 3&#xff09;、制造工艺&#xff08;如5nm、7nm&#xff09;。显示显存类型&#xff08;GDDR6X、HBM2e&#xff09;、容量、带宽及显…

数据搬家后如何处理旧 iPhone

每年&#xff0c;苹果都会推出新款 iPhone&#xff0c;激发了人们升级到 iPhone 17、iPhone 17 Pro、iPhone 17 Pro Max 或 iPhone Air 等新机型的热情。但在获得新 iPhone 之前&#xff0c;有一件重要的事情要做&#xff1a;将数据从旧 iPhone 转移到新设备。虽然许多用户都能…

Java关键字深度解析(上)

这是一份全面的Java关键字实战指南 目录 1.数据类型关键字:内存布局与性能优化 1.1 基础类型的内存密码 byte-内存的极简主义者 int-Java世界的万能钥匙 long - 时间与ID的守护者 1.2 引用类型的架构设计 String-不是关键字但胜于关键字 2.访问修饰符:企业级权限控制 …

C语言深度解析:指针数组与数组指针的区别与应用

目录 1 引言&#xff1a;从名字理解本质区别 2 指针数组&#xff1a;灵活管理多个指针 2.1 基本概念与声明方式 2.2 内存布局与特性 2.3 典型应用场景&#xff1a;字符串数组与多维度数据管理 2.3.1 静态分配示例&#xff1a;字符串数组 2.3.2 动态分配示例&#xff1a;…

Node.js 高级应用:负载均衡与流量限制

在当今高并发的网络应用环境中&#xff0c;如何有效地分配服务器资源并保护系统免受恶意攻击是开发者必须面对的重要问题。Node.js 作为一款广受欢迎的服务器端 JavaScript 运行时环境&#xff0c;提供了丰富的工具和模块来应对这些挑战。本文将深入探讨如何在 Node.js 中实现负…

信任链验证流程

信任链验证流程 (The Chain of Trust)整个过程就像一场严格的接力赛&#xff0c;每一棒都必须从可信的上一位手中接过接力棒&#xff08;信任&#xff09;&#xff0c;验证无误后&#xff0c;再跑自己的那段路&#xff0c;并把信任传递给下一棒现在&#xff0c;我们来详细解读图…

黄昏时刻复古胶片风格人像风光摄影后期Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色教程这套 黄昏时刻复古胶片风格人像风光摄影后期 Lr 调色方案&#xff0c;以落日余晖为核心色彩元素&#xff0c;加入复古胶片质感&#xff0c;让画面充满温暖与怀旧氛围。整体色调偏向橙红与青绿的互补对比&#xff0c;天空的夕阳光影与人像肤色相互映衬&#xff0c;既有胶…

硬件驱动——I.MX6ULL裸机启动(3)(按键设置及中断设置

重点&#xff1a;1.GIC&#xff1a;&#xff08;Generic Interrupt Controller&#xff09;通用中断控制器&#xff0c;是ARM架构中用于管理中断的核心模块&#xff0c;主要用于现代多核处理器系统。它负责接收&#xff0c;分发并分发中断请求&#xff0c;减轻CPU负担&#x…

用deepseek对GPU服务器进行压力测试

利用 DeepSeek 模型对 GPU 服务器进行压力测试&#xff0c;核心思路是通过模拟高负载的模型推理 / 微调任务&#xff0c;验证 GPU 服务器在计算、显存、网络等维度的承载能力&#xff0c;同时观察稳定性与性能瓶颈。以下是具体的测试方案&#xff0c;涵盖测试环境准备、核心测试…

ARM(7)IMX6ULL 按键控制(轮询 + 中断)优化工程

一、硬件介绍1. 开关功能定义共 3 个开关&#xff08;两红一黄&#xff09;&#xff0c;功能分工明确&#xff1a;中间开关&#xff1a;复位按钮左边开关&#xff1a;低功耗按钮右边开关&#xff1a;用户独立控制的试验按键&#xff08;核心控制对象&#xff09;2. 核心电平逻辑…

【QT随笔】什么是Qt元对象系统?Qt元对象系统的核心机制与应用实践

【QT随笔】什么是Qt元对象系统&#xff1f;Qt元对象系统的核心机制与应用实践 之所以写下这篇文章&#xff0c;是因为前段时间自己面试的时候被问到了&#xff01;因此想借此分享一波&#xff01;&#xff01;&#xff01;本文主要详细解释Qt元对象系统的概念、作用及实现机制…

从技术视角解析加密货币/虚拟货币/稳定币的设计与演进

随着加密货币行情的持续走高&#xff0c;除了资产价值&#xff0c;我想试着从底层程序设计与架构角度解析比特币、以太坊、稳定币以及新兴公链的核心技术方案。作者在2018年设计实施了基于区块链技术的金融项目&#xff0c;并荣获了国家课题进步奖&#xff0c;对加密货币及场景…

[MySQL]Order By:排序的艺术

[MySQL]Order By&#xff1a;排序的艺术 1. 简介 在数据库管理中&#xff0c;数据的排序是一项至关重要的操作。MySQL 的 ORDER BY 子句为我们提供了强大而灵活的功能&#xff0c;用于对查询结果进行排序。无论是按照字母顺序排列名称&#xff0c;还是根据日期或数值进行升序…

【工具代码】使用Python截取视频片段,截取视频中的音频,截取音频片段

目录 ■截取视频方法 1.下载 ffmpeg-8.0-essentials_build 2.配置到环境变量 3.python代码 4.运行 5.效果 ■更多 截取视频中的音频 截取音频 Sony的CR3图片&#xff0c;转换为JPG ■截取视频方法 1.下载 ffmpeg-8.0-essentials_build "https://www.gyan.de…

Three.js 平面始终朝向相机

instanceMesh需要让实例像粒子一样始终朝向相机 可以如下处理shaderexport const billboarding // billboarding函数的GLSL实现 // 参数: // - position: 顶点动态位置偏移 // - positionLocal: mesh的position // - horizontal: 水平方向是否朝向相机 // - vertical: 垂直方…

旗讯 OCR 识别系统深度解析:一站式解决表格、手写文字、证件识别难题!

在数字化办公日益普及的今天&#xff0c;“纸质文档转电子”“图片信息提取” 等需求愈发频繁&#xff0c;但传统手动录入不仅效率低下&#xff0c;还容易出现数据错误。近期发现一款实用性极强的工具 —— 旗讯数字 OCR 识别系统&#xff0c;其覆盖多场景的识别功能、极简操作…

MissionPlanner架构梳理之(十四)日志浏览

概述和目的 Mission Planner 中的日志浏览系统提供了加载、查看、分析和解读 ArduPilot 驱动的飞行器生成的飞行日志的工具。飞行日志包含飞行操作期间记录的关键遥测数据&#xff0c;使用户能够查看飞行性能、诊断问题并从过去的飞行中获取见解。 本页记录了日志浏览系统的架…

机器学习shap分析案例

在进行数据分析和机器学习时经常用到shap&#xff0c;本文对shap相关的操作进行演示。波士顿数据集链接在这里。 SHAP Analysis Guide Set up 导入必要包 import pandas as pd import numpy as np import lightgbm as lgb import matplotlib import matplotlib.pyplot as p…

网络编程相关函数

1. 套接字操作相关1.1 socketint socket(int domain, int type, int protocol);参数说明int domain协议族&#xff0c;常用 AF_INET&#xff08;IPv4&#xff09;、AF_INET6&#xff08;IPv6&#xff09;int type套接字类型&#xff0c;SOCK_DGRAM&#xff08;UDP&#xff09;、…