Object和Objects的区别
Object类
如果一个类没有指定父类,默认就是继承Object类。
Object类里面共有11个方法:
经常用到的equals(),toString()都是直接使用或者重写的Object里面的这些方法;
另外还有final native修饰的方法:反射需要用到的getClass(),线程操作需要的notify(),notifyAll(),wait(long timeout);
还有native修饰的方法:hashCode()和clone()
返回值 | 方法名 | 作用 |
---|---|---|
protected Object | clone() | 创建并返回此对象的副本 |
boolean | equals(Object obj) | 判断一些其他对象是否等于此 |
protected void | finalize() | 当垃圾收集确定不再有对该对象的引用时,垃圾收集器在对象上调用该对象 |
Class<?> | getClass() | 返回此Object的运行时类 |
int | hashCode() | 返回对象的哈希码值 |
void | notify() | 唤醒正在等待对象监视器的单个线程 |
void | notifyAll() | 唤醒正在等待对象监视器的所有线程 |
String | toString() | 返回对象的字符串表示形式 |
void | wait() | 导致当前线程等待,直到另一个线程调用该对象的 notify()方法或 notifyAll()方法 |
void | wait(long timeout) | 导致当前线程等待,直到另一个线程调用 notify()方法或该对象的 notifyAll()方法,或者指定的时间已过 |
void | wait(long timeout, int nanos) | 导致当前线程等待,直到另一个线程调用该对象的 notify()方法或 notifyAll()方法,或者某些其他线程中断当前线程,或一定量的实时时间 |
Object类源码
package java.lang;public class Object {private static native void registerNatives();static {registerNatives();}public final native Class<?> getClass();public native int hashCode();public boolean equals(Object obj) {return (this == obj);}protected native Object clone() throws CloneNotSupportedException;public String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());}public final native void notify();public final native void notifyAll();public final native void wait(long timeout) throws InterruptedException;public final void wait(long timeout, int nanos) throws InterruptedException {if (timeout < 0) {throw new IllegalArgumentException("timeout value is negative");}if (nanos < 0 || nanos > 999999) {throw new IllegalArgumentException("nanosecond timeout value out of range");}if (nanos > 0) {timeout++;}wait(timeout);}public final void wait() throws InterruptedException {wait(0);}protected void finalize() throws Throwable { }
}
Objects类
Objects类是final修饰的类,不可继承,内部方法都是static方法,从jdk1.7开始才引入了Objects类
返回值 | 方法名 | 作用 |
---|---|---|
static int | compare(T a, T b, Comparator<? super T> c) | 如果参数a,b相同则返回0,否则返回c.compare(a, b)的结果 |
static boolean | deepEquals(Object a, Object b) | 对比a,b参数是否深层次相等,假定a,b为数组,对比数组的每个参数 |
static boolean | equals(Object a, Object b) | 对比a,b参数是否相等 |
static int | hash(Object… values) | 为输入值序列生成哈希码 |
static int | hashCode(Object o) | 返回哈希码。如果o为null则返回0 |
static boolean | isNull(Object obj) | 如果obj参数为null返回true |
static boolean | nonNull(Object obj) | 如果obj参数不为null返回true |
static T | requireNonNull(T obj) | 检查指定的对象引用不是 null,为null报空指针错误 |
static T | requireNonNull(T obj, String message) | 检查指定的对象引用不是null并抛出自定义的NullPointerException(如果是) |
static T | requireNonNull(T obj, Supplier messageSupplier) | 检查指定的对象引用不是null并抛出一个自定义的NullPointerException(如果是) |
static String | toString(Object o) | 返回对象的字符串表示形式 |
static String | toString(Object o, String nullDefault) | 如果第一个参数不是 null ,则返回第一个参数调用 toString的结果,否则直接将第二个参数nullDefault返回 |
Objects类源码
package java.util;import java.util.function.Supplier;public final class Objects {private Objects() {throw new AssertionError("No java.util.Objects instances for you!");}public static boolean equals(Object a, Object b) {return (a == b) || (a != null && a.equals(b));}public static boolean deepEquals(Object a, Object b) {if (a == b)return true;else if (a == null || b == null)return false;elsereturn Arrays.deepEquals0(a, b);}public static int hashCode(Object o) {return o != null ? o.hashCode() : 0;}public static int hash(Object... values) {return Arrays.hashCode(values);}public static String toString(Object o) {return String.valueOf(o);}public static String toString(Object o, String nullDefault) {return (o != null) ? o.toString() : nullDefault;}public static <T> int compare(T a, T b, Comparator<? super T> c) {return (a == b) ? 0 : c.compare(a, b);}public static <T> T requireNonNull(T obj) {if (obj == null)throw new NullPointerException();return obj;}public static <T> T requireNonNull(T obj, String message) {if (obj == null)throw new NullPointerException(message);return obj;}public static boolean isNull(Object obj) {return obj == null;}public static boolean nonNull(Object obj) {return obj != null;}public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier) {if (obj == null)throw new NullPointerException(messageSupplier.get());return obj;}
}
Object和Objects的区别相关推荐
- Object 和 Objects 的区别
一.Object 类 如果一个类没有指定父类,默认就是继承 Object 类.Object 类里面共有 11 个方法:经常用到的 equals(),toString() 都是直接使用或者重写 Obje ...
- API:Math、System、Object、Objects、equals、toString、BigDecimal
API: Application Programming Interface 应用程序接口 简单来说:就是Java已经帮我们写好的接口,直接拿来用即可 api文档--甲骨文官网---下载java-- ...
- java之Thread.sleep(long)与object.wait()/object.wait(long)的区别及相关概念梳理(good)
一.Thread.sleep(long)与object.wait()/object.wait(long)的区别 sleep(long)与wait()/wait(long)行为上有些类似,主要区别如下: ...
- html标签object和embed,html标签object和embed的区别
object和embed的区别 The code in bold above is the actual code that you need to place in your page to emb ...
- flash文本呈现html啥意思,显示flash内容时用的OBJECT和EMBED标签区别介绍
显示flash内容时用的OBJECT和EMBED标签区别介绍 发布时间:2014-05-13 18:03:29 作者:佚名 我要评论 要在网页中正常显示flash内容,那么页面中必须要有指定f ...
- Object和Objects(java)
Object和Objects 文章目录 Object和Objects Object Object的构造方法 Object的成员方法 public String toString() public bo ...
- scala class和object,trait的区别
2019独角兽企业重金招聘Python工程师标准>>> Scala类 class Counter {private var value = 0 // 必须初始化字段def incre ...
- scala(3):class和object,trait的区别
2019独角兽企业重金招聘Python工程师标准>>> Scala类 1 2 3 4 5 6 7 8 9 10 11 12 13 class Counter { private va ...
- AS3中Object与Dictionary的区别
AS3中的Dictionary类(flash.utils.Dictionary)是一个新的AS类. Dictionary类和Object唯一的区别在于: Dictionary对象可以使用非字符串作为键 ...
最新文章
- docker api 基本介绍和使用
- 为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作
- 【Oracle报错】ORA-01795: 列表中的最大表达式数为 1000 问题解决(使用JDK8的 stream 实现)
- mysql命令:查看表结构
- 阅读王概凯老师架构漫谈系列总结
- [Golang]计算一个文件的MD5值
- js一些平时会用到的
- POI读取单元格信息及单元格公式
- 计算机基础知识第三章测试,计计算机应用基础第三章测试题
- 蚁群算法路径规划_环境感知与规划专题(十)——基于采样的路径规划算法(二)...
- 8.分布式服务架构:原理、设计与实战 --- 敏捷开发2.0的自动化工具
- 中控考勤软件sqlserver数据库建立办法
- Linux命令学习笔记之 network NetworkManager
- R语言快速入门课——结合各种生物信息学及医学案例,使R语言快速入门——R软件及Rstudio下载(同步课程正在更新中)
- gradle下载很慢的解决方式
- springboot集成caffeine实现本地缓存
- python编写关不掉的流氓表白软件——快去找你爱的他表白吧
- Kafka学习之Replication tools之Reassign Partitions Tool
- 带宽与宽带的区别是什么?
- 编写文件服务器,编写服务器的头文件