Java中Object类的方法笔记
今天看了下Object类的源码,以下是我看源码的一些笔记,欢迎有小伙伴来补充~
首先列举下几个主要方法(面试被问到过的):
equals:这个主要是用于比较对象的,Object中比较的是比较原始的,直接进行的是地址的比较,代码如下所示:
public boolean equals(Object obj) {
return (this == obj);
}
一般在编写自己的类的时候,都会重写这个方法,不仅比较对象的地址,还会比较对象中具体的值,类库中的String等文件就对这个方法进行了重写。
和hashCode一起使用的,下面在hashCode会具体讲解
finalize;这个是在垃圾回收之前执行的,调用了这个方法不一定执行,但会在垃圾收集器前执行。之后过后,再运行,就不会在执行了,就执行依次。
getClass:这个是获取对象的类,是反射获取类对象的一种方式,通过获取类,可以实现所有的反射功能,获取或者更改类的属性或者方法
hashCode;去标识唯一的对象地址,比如在hashmap集合中,使用它可以获取具体的hash值,然后计算元素在table表中的索引位置
notify;这个是唤醒线程的,当线程处于等待池中时,使用这个方法可以把线程唤醒,从等待状态到等锁状态,获取了锁后就可以运行线程了
notifyall;和上面的方法时相同的,只不过上一个方法是唤醒了一个线程,而这个方法是唤醒所有的线程
toString:这个方法是输出对象的,一般在实例类中,若想输出属性值,需要重写这个方法,否则输出的就是一串十六进制数据
wait:这个方法是表示正在运行的线程调用这个方法后,这个线程会放弃自己拥有的锁,然后进行等待状态,需要被唤醒,才能继续竞争锁资源,才有可能运行
额外关联的内容有:
1.wait和sleep的区别:
wait会放弃锁的资源,等待被notify唤醒,然后才能继续去竞争锁资源,而sleep是休眠,等设定的休眠时间已到,就会重写回到就绪状态,等到获取CPU资源就可以运 行了,且wait是属于Object类中的方法,sleep是属于Thread类的方法,因为wait需要明确是哪个对象处于等待状态,等到被唤醒时,也需要直到是唤醒哪个对象;对于 sleep方法而言,就是休眠暂停用的,无论是哪个对象线程调用它,都会暂停一段时间,不需要直到时哪个对象。所以这两个方法处于不同的类中。
2.具体的hashCode和equals的挂关系说明:
以hashmap为例,当对象的hash值一致时,也就表示其hashCode值是一样的,hashCode值一样,就是说对象得出的table下标时一样的,多个需要链表来存储,链表中的数据通过equals
来进行比较,就是当equals值返回为true时,hashCode值一定一样,否则equals就没有比较的意义了。只有先找到下标位置,才有继续比较的意义。若下标不同,equals永远不会想通过。
在重写方法的时候,都会一起把hashCode和equals方法一起重写,比如若把hashCode返回相同的值,则就不能具体区分对象了,会得到这个类实例的对象都是同一个对象。
如equals方法都是同一个值,则没有办法具体区分对象中的值比较,会任务对象中的值都是相同的。
等后续会把代码实例不上
Java中Object类的方法笔记的更多相关文章
- Java中Object类hashCode的底层实现
Java中Object类hashCode的底层实现 openjdk\jdk\src\share\native\java\lang\Object.c 42 static JNINativeMethod ...
- Java中String类的方法及说明
String : 字符串类型 一. String sc_sub = new String(c,3,2); // String sb_copy = new String(sb) ...
- 【转载】Java中String类的方法及说明
转载自:http://www.cnblogs.com/YSO1983/archive/2009/12/07/1618564.html String : 字符串类型 一. String sc_ ...
- 【Java基础之Object类(一)】Java中Object类中的所有方法(toString、equals、hashCode、clone、finalize、wait和notify等)详解(转载)
java中的hashcode.equals和toString方法都是基类Object的方法. 首先说说toString方法,简单的总结了下API说明就是:返回该对象的字符串表示,信息应该是简明但易于读 ...
- Java中Object类的公有方法
HashCode();wait();notify();equals();getClass();toString();clone();finalize(); 这里只是简单介绍一下其中的几个函数: Has ...
- Java中Object类常用的12个方法,你用过几个?
前言 Java 中的 Object 方法在面试中是一个非常高频的点,毕竟 Object 是所有类的“老祖宗”.Java 中所有的类都有一个共同的祖先 Object 类,子类都会继承所有 Object ...
- JAVA笔记整理(三),JAVA中的类和方法
类 类是JAVA中一个重要的概念,可以把类理解成一个对象的抽象,这个抽象的对象包含了变量(用来描述这个对象的属性)和方法(用来描述这个对象可以干什么),类中的各个成员之间可以相互调用(static修饰 ...
- java中Object类的getClass方法有什么用以及怎么使用?
Object类的getClass的用法: Object类中有一个getClass方法,m a r k- t o- w i n:它会返回一个你的对象所对应的一个Class的对象,这个返回来的对象 ...
- Java中Integer类的方法
java.lang 类 Integer java.lang.Object java.lang.Number java.lang.Integer 全部已实现的接口: Serializable, Comp ...
随机推荐
- 接触node第一步
趁着工作不忙,今天来系统记录一下安装node环境: 1.node下载地址为:https://nodejs.org/en/,检查是否安装成功:如果输出版本号,说明我们安装node环境成功:node -v ...
- 如何在Github创建repository
第一步:登陆Github,点击new repository 第二步:输入相应内容创建 第三步,创建完成,如下.
- 51nod 1009 数字1的数量(数位dp模板)
给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数. 例如:n = 12,包含了5个1.1,10,12共包含3个1,11包含2个1,总共5个1. 数位dp的模板题 ...
- latch
signal definition sequence:
- centos7救援模式--误删/usr/bin/恢复
模拟场景 centos7 误删/usr/bin/等系统内置文件夹, 导致几百个内置命令丢失. 修复 rescue模式 vm模拟一遍(如果在物理机, 可通过U盘方式直接开机U盘进入选择救援模式, 方式通 ...
- Linux性能优化-理解平均负载
1 平均负载含义 当系统变慢的时候,我们一般使用 top 或 uptime 命令来查看系统平均负载情况. 正确定义:单位时间内,系统中处于可运行状态和不可中断状态的平均进程数.错误定义:单位时间内的c ...
- 读Vue源码 (依赖收集与派发更新)
vue的依赖收集是定义在defineReactive方法中,通过Object.defineProperty来设置getter,红字部分主要做依赖收集,先判断了Dep.target如果有的情况会执行红字 ...
- POI中excle样式怎么写
POI中可能会用到一些需要设置EXCEL单元格格式的操作小结: 先获取工作薄对象: HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb ...
- Linux下复制文件
命令: cp -Rf /文件名1/* /文件名2 把文件夹1下的文件复制到文件2中(/* 表示复制文件夹1下的文件,不复制文件夹1)
- 机器学习总结(二)bagging与随机森林
一:Bagging与随机森林 与Boosting族算法不同的是,Bagging和随机森林的个体学习器之间不存在强的依赖关系,可同时生成并行化的方法. Bagging算法 bagging的算法过程如下: ...