Java Object类方法介绍

Object作为顶级类,所有的类都实现了该类的方法,包括数组。
查询Java文档:

1、object.eauqls():

其作用与 == 有些类似。
==:
是一个比较运算符,而不是一个方法。
①可以判断基本类型,也可以判断引用类型。
②若判断基本数据类型,则判断他们的值是否相同。
③若判断引用类型,则判断他们的地址是否相同,即判断他们是不是同一个对象。
④只要有基本数据类型,那么就是判断值是否相等。
equals:
是object类中的方法,不是运算符,只能判断引用类型。
①默认判断地址是否相同。
②子类往往都会将其重写,用来判断对应内容是否相等。
例:
这是Object中equals的源码:
Integer类将equals()改写为:
例:用== 和equals()来判断两个Integer对象是否相等:
Integer i1 = new Integer(1000);
Integer i2 = new Integer(1000);
i1 == i2;     //false  因为==判断引用类型时,判断他们地址是否相同
i1.equals(i2);//true   而Integer对equals()方法进行重写,所以是判断两个对象的值是否相等,因此正确。

2、hashCode():

1、提高具有哈希结构的容器的效率。
2、两个引用,如果指向的是同一个对象,则哈希值是一样的。
3、两个引用,如果指向的是不同的对象,则哈希值是不一样的。
4、哈希值主要是根据地址号来的,但是不能完全将哈希值等价于地址。
5、Object的hashcode 方法是本地方法,也就是用 c 或 c++ 实现的,该方法直接返回对象的内存地址。
详情: java Object的hashCode

3、toString():

1、默认返回:
全类名(包名+类名) + @ + 哈希值的十六进制。
源码:
2、子类往往会重写该方法,用来输出对象的属性信息。
3、重写该方法后,打印或拼接对象时,都会自动调用该对象的toString()方法。
4、直接输出一个对象时,toString()方法会被默认调用

4、finalize():

当垃圾回收器确定不存在该对象的更多引用时,由垃圾回收器自动调用此方法。
1、当对象被回收时,系统自动调用该对象的finalize()方法。子类可以重写该方法,做一些释放资源的操作。
2、什么时候对象会被回收:
当一个对象没有任何引用时,jvm就认为该对象是一个垃圾对象,就会使用垃圾回收机制销毁该对象,
在销毁该对象前,会先调用finalize()方法。
3、若不重写该方法,则在销毁某个对象前,会自动调用object的finalize()方法,即什么也不做。
4、并不是一个对象没有引用之后立刻就会被回收:
如果一个对象一旦没有引用,就立刻被回收,意味着垃圾回收器会时时刻刻监控,这样浪费资源,效率低。
垃圾回收器有一个自己的算法,会根据算法来回收。
5、也可以通过System.gc()主动触发垃圾回收机制。
System.gc():作用为立即运行垃圾回收器。
且垃圾回收器调用过程中,不会阻塞程序,程序会继续向后运行。

5、clone():

实现clone()的两种方式:
a.在java语言中,如果需要实现深克隆,可以通过覆盖Object类的clone()方法实现,也可以通过序列化的方式来实现。
b.如果引用类型里面还包含很多引用类型,或者内层引用类型的类里面又包含引用类型,使用clone方法就会很麻烦。
这时我们可以用序列化的方式来实现对象的深克隆。
object规范中clone的约定:(不是绝对的要求,只是一个实现clone方法时应该遵守的规范标准)
x.clone() != x 返回 true;                即二者不是同一个对象,地址不同
x.clone().getClass() == x.getClass() 返回 true;                即二者属于同一个类
x.clone.equals(x) 返回 true,自定义对象应重写equals方法。            即二者通过equals()判断相同,也就是值相同
按照约定, 克隆对象与原对象地址地址不同,所属 同一个类,两个对象 对应实例各字段的值相同,即克隆的对象不依赖于原对象,也就是 深拷贝
按照约定,clone返回的对象应该通过 super.clone() 获得。
默认使用父类clone()方法的缺陷:
如果克隆对象中包含的域引用了可变的对象,上述这种简单的 clone 实现可能会导致灾难性的后果。
因为默认clone()是浅克隆,如下图,school类中有两个属性:
分别为String类型和Student[]类型
使用clone克隆一份school1给school2
可见,所有的引用数据类型,String类型的name中的value值,Student[]类型的数组
的值都是一样的,也就是说指向同一个地方。

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

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

相关文章

gitLab 使用tortoiseGit 克隆新项目 一直提示tortoiseGitPlink输入密码 输完也不生效

问题描述:准备用TortoiseGit拉取gitlab上一个新项目代码,出现tortoiseGitPlink提示让输入密码,输入后又弹出,反复几次,无法down下来代码。 解决方案: 1.找到PuTTYgen工具,打开 2. 点击load 按钮…

山脉数组的峰顶索引 ---- 二分查找

题目链接 题目: 分析: 我们很明显, 可以从峰值位置将数组分成两段, 具有"二段性", 所以可以用二分查找因为arr是山峰数组, 不存在相等的情况如果arr[mid] > arr[mid 1], 说明mid的位置可能是峰值, 移动right mid如果arr[mid] < arr[mid 1], 说明mid的位置…

神奇的一万

在代码界&#xff0c;有个神奇的存在&#xff0c;它叫一万&#xff1a;eval&#xff08;&#xff09;。 这个神奇的一万&#xff0c;在python和JavaScript中都存在&#xff0c;作用也是基本相同的。 Python中的eval函数能将字符串str当成有效的表达式来求值并返回计算结果。 …

vue contextPath的思考

先说我这边的情况&#xff0c;目前项目都是前后端分离开发的&#xff0c;上线有种部署方式&#xff0c;常见的就是前后端分开部署&#xff0c;这是比较常见的&#xff0c;我这边因客户原因&#xff0c;打包一起进行部署比较简单&#xff0c;交付技术运维部方便后期其他现场部署…

docker ps显示的参数具体是什么意思

1&#xff0c;运行一个容器 docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"这段命令的作用是使用 docker run 命令运行一个基于 ubuntu:15.10 镜像的 Docker 容器&#xff0c;并在容器中执行一个无限循环的命令。 具体解…

10Django项目--用户管理系统--改

对应视频链接点击直达 10Django项目--用户管理系统--改 对应视频链接点击直达改a&#xff0c;本质b&#xff0c;修改(更新) 页面相关a&#xff0c;index页面新增操作按钮b&#xff0c;修改(更新)页面c&#xff0c;路由和函数 OVER&#xff0c;不会有人不会吧不会的加Q139400651…

基于jeecgboot-vue3的Flowable流程-我的任务(一)

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、首先可以用现成生成代码的前端来做这个&#xff0c;只要做一些调整就可以了&#xff0c;这样利用现有的一些模板可以快速构建我的任务&#xff0c;否则vue2与vue3相差太大&#xff0c;移…

质量人,你还在等什么?快来六西格玛培训公司充电吧!——张驰咨询

在竞争激烈的商业环境中&#xff0c;质量成为了企业生存和发展的关键。而六西格玛&#xff0c;作为一种全球公认的质量管理方法论&#xff0c;正在成为越来越多企业追求品质革命的重要工具。而六西格玛培训公司&#xff0c;则成为了这场品质革命中&#xff0c;质量人不可或缺的…

菊花链通信技术整理

目录 一、菊花链简介 二、菊花链与CAN通信的区别 三、常见的菊花链AFE芯片 四、菊花链数据结构 五、菊花链方案介绍 一、菊花链简介 首先简单的说一下菊花链以及菊花链的应用&#xff0c;在目前国内的BMS开发中&#xff0c;我们应用最广泛的目前还还是分布式&#xff0c;…

Linux:线程

文章目录 前言1. 线程概念1.1 什么是线程1.2 线程比进程更加轻量化1.3 虚拟地址到物理地址的转化物理内存的管理页表 1.4 线程的优点1.5 线程的缺点1.6 线程异常1.7 线程用途 2. 进程 vs 线程3. 线程控制3.1 线程创建3.2 线程退出3.3 线程等待3.4 分离线程3.5 线程取消 4. 线程…

机器学习-6-对随机梯度下降算法SGD的理解

参考一文带您了解随机梯度下降(Stochastic Gradient Descent):python代码示例 参考sklearn-SGDClassifier 1 梯度下降 在机器学习领域,梯度下降扮演着至关重要的角色。梯度下降是一种优化算法,通过迭代沿着由梯度定义的最陡下降方向,以最小化函数。类似于图中的场景,可以…

english语法

从句&#xff1a;简单句连词 介词

Android studio sdk 虚拟机无法打开运行

1.确认是否在BIOS开启硬件虚拟化支持,选择Enable 2.win8/win10 Hyper-V冲突。控制面板-》程序与功能-》windows功能-》关闭 Hyper-V 3.sdk 路径非默认路径 复制avd C:\Users\Administrator\.android\avd 到 sdk的安装路径下 D:\Android\sdk 。重启软件重新启动即可

老板:2个亿的销售额,利润只有55万!电商这个生意真的到头了?

近来&#xff0c;一段对话轰动了半个电商圈的老板&#xff0c;干拼多多&#xff0c;2亿的销售额&#xff0c;利润只有55万&#xff01; 其实造成这一现象的原因就是“内卷” 说一句电商行业真实的现状&#xff0c;电商发展了十几年&#xff0c;网友对网购已经完全熟悉&#x…

DuGa-DIT论文翻译

Dual Gated Graph Attention Networks with Dynamic Iterative Training for Cross-Lingual Entity Alignment 双门控图注意力网络与跨语言实体对齐的动态迭代训练 Abstract 近年来&#xff0c;跨语言实体对齐引起了相当大的关注。过去使用传统方法来匹配实体的研究都有一个…

Linux--构建进程池

目录 1.进程池 1.1.我们先完成第一步&#xff0c;创建子进程和信道 1.2. 通过channel控制&#xff0c;发送任务 1.3回收管道和子进程 1.4进行测试 1.5完整代码 1.进程池 进程池其产生原因主要是为了优化大量任务需要多进程完成时频繁创建和删除进程所带来的资源消耗&#…

CentOS7 部署单机版 ElasticSearch + Logstash

一、部署ElasticSearch Elasticsearch部署参考下面文章&#xff1a; CentOS7 部署单机版 elasticsearch-CSDN博客文章浏览阅读285次&#xff0c;点赞6次&#xff0c;收藏3次。ElasticSearch&#xff0c;用于检索、聚合分析和大数据存储https://blog.csdn.net/weixin_44295677…

后端经典三层架构

大家好&#xff0c;这里是教授.F 引入&#xff1a; MVC 全称∶ Model 模型、View 视图、 Controller 控制器。MVC 最早出现在 JavaEE 三层中的 Web 层&#xff0c;它可以有效的指导WEB 层的代码如何有效分离&#xff0c;单独工作。 View 视图∶只负责数据和界面的显示&#…

拼多多买家关注店铺 id 导出商品收藏导出查看全店spu_id

拼多多买家账号导出关注列表店铺 id、商品 id 登录网页端拼多多界面&#xff0c;清缓存后 F12加载数据&#xff0c;下滑界面自动加载缓存&#xff1b; 查看商品收藏 登录网页端拼多多界面&#xff0c;清缓存后 F12加载数据&#xff0c;下滑界面自动加载缓存&#xff1b; 一…

【招聘帖】资深数通专家 ,薪资最高3.5W

资深数通专家 薪资&#xff1a;25000-35000 元/月 工作职责 岗位职责&#xff1a; 1、负责统筹管理客户全网问题&需求跟踪管理及汇报、日常数通团队工作的每日分解协调、人员技能内训及跟踪闭环&#xff1b; 2、负责统筹对架构基线梳理评估、软件版本管理、应急方案可执行…