今天看了下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类的方法笔记的更多相关文章

  1. Java中Object类hashCode的底层实现

    Java中Object类hashCode的底层实现 openjdk\jdk\src\share\native\java\lang\Object.c 42 static JNINativeMethod ...

  2. Java中String类的方法及说明

    String : 字符串类型 一.      String sc_sub = new String(c,3,2);    //      String sb_copy = new String(sb) ...

  3. 【转载】Java中String类的方法及说明

    转载自:http://www.cnblogs.com/YSO1983/archive/2009/12/07/1618564.html String : 字符串类型 一.      String sc_ ...

  4. 【Java基础之Object类(一)】Java中Object类中的所有方法(toString、equals、hashCode、clone、finalize、wait和notify等)详解(转载)

    java中的hashcode.equals和toString方法都是基类Object的方法. 首先说说toString方法,简单的总结了下API说明就是:返回该对象的字符串表示,信息应该是简明但易于读 ...

  5. Java中Object类的公有方法

    HashCode();wait();notify();equals();getClass();toString();clone();finalize(); 这里只是简单介绍一下其中的几个函数: Has ...

  6. Java中Object类常用的12个方法,你用过几个?

    前言 Java 中的 Object 方法在面试中是一个非常高频的点,毕竟 Object 是所有类的“老祖宗”.Java 中所有的类都有一个共同的祖先 Object 类,子类都会继承所有 Object ...

  7. JAVA笔记整理(三),JAVA中的类和方法

    类 类是JAVA中一个重要的概念,可以把类理解成一个对象的抽象,这个抽象的对象包含了变量(用来描述这个对象的属性)和方法(用来描述这个对象可以干什么),类中的各个成员之间可以相互调用(static修饰 ...

  8. java中Object类的getClass方法有什么用以及怎么使用?

    Object类的getClass的用法: Object类中有一个getClass方法,m  a  r  k- t  o- w i n:它会返回一个你的对象所对应的一个Class的对象,这个返回来的对象 ...

  9. Java中Integer类的方法

    java.lang 类 Integer java.lang.Object java.lang.Number java.lang.Integer 全部已实现的接口: Serializable, Comp ...

随机推荐

  1. 【融云分析】如何实现分布式场景下唯一 ID 生成?

    ◀背景▶ 对于一套分布式部署的 IM 系统,要求每条消息的 ID 要保证在集群中全局唯一且按生成时间有序排列.如何快速高效的生成消息数据的唯一 ID ,是影响系统吞吐量的关键因素.那么,融云是如何做到 ...

  2. vue父组件给子组件传值:属性的形式

    1.父组件怎么传值 2.子组件怎么接受值:依赖props 父页面定义的参数接收返回值,到子组件依旧用定义好的参数,在定义参数的类型,然后渲染数据

  3. Redis学习-持久化机制

    Redis持久化的意义 在于故障恢复 比如你部署了一个redis,作为cache缓存,当然也可以保存一些较为重要的数据 如果没有持久化的话,redis遇到灾难性故障的时候(断电.宕机),就会丢失所有的 ...

  4. 原博客地址http://blog.chinaunix.net/uid/20656672.html不再维护(10年前数百篇oracle/teradata性能优化、故障处理案例)

    原博客地址http://blog.chinaunix.net/uid/20656672.html不再维护(数百篇oracle/teradata性能优化.故障处理原创文章) 858871 top 500 ...

  5. Java第一、二次实训作业

    1.有1.2.3.4共4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去掉不满足条件的排列. 代码 pack ...

  6. CEF 自定义用户协议(scheme)实现以二进制流的方式显示图片、视频、音频

    转载:https://www.cnblogs.com/sinceret/p/10417941.html 转载:https://stackoverflow.com/questions/48811756/ ...

  7. Vue学习——使用vue-cli搭建一个简单的本地vue项目

    前提 安装好node.js.npm.vue-cli.为什么要先安装这些,建议查看https://www.cnblogs.com/jixue/p/10673875.html,这个对于vue-cli理解很 ...

  8. 微信小程序----wxss设置样式

    一.wxml 界面结构wxmL比较容易理解,主要是由八大类基础组件构成: 一.视图容器(View Container): 二.基础内容(Basic Content) 组件名 说明 组件名 说明 vie ...

  9. Object-C的类可以多重继承吗?可以实现多个接口吗?category是什么?重写一个类的方式用继承好还是分类好,为什么?

    Object-C的类可以多重继承吗?可以实现多个接口吗?category是什么?重写一个类的方式用继承好还是分类好,为什么? 答:Object-c的类不可以多重继承,可以实现多个接口(协议),Cate ...

  10. 从svn到git开发转变

    前言:目前的公司的开发技术还是处于刀耕火种的年代,react,vue已经火到不行了,可是还在用jQuery一遍遍处理着dom.版本控制用的是svn,这里也不是说svn不好,在windows下svn的“ ...