Objects源码解析
Objects类解析
 JDK7新增Objects类介绍(以下程序以1.8来说明)
简介:
 JDK7里面新增的Objects类,本人学习HashMap源码偶遇此类,所以研究一下,本类将对象常用的操作进行了封装,包括hashCode、equals、deepEquals等方法。
源码:
package java.util;
import java.util.function.Supplier;
public final class Objects {
    //私有构造函数无法New对象,也无法去继承final
    private Objects() {
        throw new AssertionError("No java.util.Objects instances for you!");
    }
    //equals方法比较两个对象是否相等(首先比较内存地址,然后比较a.equals(b),只要符合其中之一返回true)
    public static boolean equals(Object a, Object b) {
        return (a == b) || (a != null && a.equals(b));
    }
    //深度equals深度比较两个对象是否相等(首先比较内存地址,相同返回true;如果传入的是数组,则比较数组内的对应下标值是否相同)
    public static boolean deepEquals(Object a, Object b) {
        if (a == b)
            return true;
        else if (a == null || b == null)
            return false;
        else
            return Arrays.deepEquals0(a, b);
    }
    //返回对象的hashCode,若o的为null,返回0
    public static int hashCode(Object o) {
        return o != null ? o.hashCode() : 0;
    }
   //当传入多个参数转成数组,计算HashCode
    public static int hash(Object... values) {
        return Arrays.hashCode(values);
    }
    //返回对象的String表示,若传入null,返回null字符串
    public static String toString(Object o) {
        return String.valueOf(o);
    }
    //返回对象的String表示,若传入null,返回默认值nullDefault
    public static String toString(Object o, String nullDefault) {
        return (o != null) ? o.toString() : nullDefault;
    }
    //使用指定的比较器c 比较参数a和参数b的大小(相等返回0,a大于b返回整数,a小于b返回负数)
    public static <T> int compare(T a, T b, Comparator<? super T> c) {
        return (a == b) ? 0 :  c.compare(a, b);
    }
   //如果传入的obj为null抛出NullPointerException,否者返回obj
    public static <T> T requireNonNull(T obj) {
        if (obj == null)
            throw new NullPointerException();
        return obj;
    }
   //如果传入的obj为null抛出NullPointerException并可以指定错误信息message,否者返回obj
    public static <T> T requireNonNull(T obj, String message) {
        if (obj == null)
            throw new NullPointerException(message);
        return obj;
    }
    -----------------------------以下是jdk8新增方法---------------------------
   //判断传入的obj是否为null,是返回true,否者返回false
    public static boolean isNull(Object obj) {
        return obj == null;
    }
    //判断传入的obj是否不为null,不为空返回true,为空返回false (和isNull()方法相反)
    public static boolean nonNull(Object obj) {
        return obj != null;
    }
   //如果传入的obj为null抛出NullPointerException并且使用参数messageSupplier指定错误信息,否者返回obj
    public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier) {
        if (obj == null)
            throw new NullPointerException(messageSupplier.get());
        return obj;
    }
}
Objects源码解析的更多相关文章
- Python2 基本数据结构源码解析
		Python2 基本数据结构源码解析 Contents 0x00. Preface 0x01. PyObject 0x01. PyIntObject 0x02. PyFloatObject 0x04. ... 
- EventBus源码解析 源码阅读记录
		EventBus源码阅读记录 repo地址: greenrobot/EventBus EventBus的构造 双重加锁的单例. static volatile EventBus defaultInst ... 
- jQuery整体架构源码解析(转载)
		jQuery整体架构源码解析 最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性, ... 
- Java 集合系列11之 Hashtable详细介绍(源码解析)和使用示例
		概要 前一章,我们学习了HashMap.这一章,我们对Hashtable进行学习.我们先对Hashtable有个整体认识,然后再学习它的源码,最后再通过实例来学会使用Hashtable.第1部分 Ha ... 
- Fresco源码解析 - DataSource怎样存储数据
		Fresco源码解析 - DataSource怎样存储数据 datasource是一个独立的 package,与FB导入的guava包都在同一个工程内 - fbcore. datasource的类关系 ... 
- Java 集合系列 09 HashMap详细介绍(源码解析)和使用示例
		java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ... 
- Java 集合系列 10 Hashtable详细介绍(源码解析)和使用示例
		java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ... 
- 【转】Java HashMap 源码解析(好文章)
		 .fluid-width-video-wrapper { width: 100%; position: relative; padding: 0; } .fluid-width-video-wra ... 
- Heritrix 3.1.0 源码解析(三十七)
		今天有兴趣重新看了一下heritrix3.1.0系统里面的线程池源码,heritrix系统没有采用java的cocurrency包里面的并发框架,而是采用了线程组ThreadGroup类来实现线程池的 ... 
随机推荐
- poj 3177 Redundant Paths(边双连通分量+缩点)
			链接:http://poj.org/problem?id=3177 题意:有n个牧场,Bessie 要从一个牧场到另一个牧场,要求至少要有2条独立的路可以走.现已有m条路,求至少要新建多少条路,使得任 ... 
- C# PictureBox控件畫圖
			PictureBox的正方向: BitMap初始化: Bitmap bt = new Bitmap(Width,Height); Graphics gdi = Graphics.FromIm ... 
- C#中查看当前Request是否使用代理的一种方法
			在程序中设置了代理,但是不知道如何判断是否真的使用了该代理, 在Visual Studio中可以使用以下方式来查看: 设置了代理 -> 在代码中WebRequest的实例处设置断点 -> ... 
- SQL  从一个表读取数据存到另一个表
			原来没有的创建的表select * into 表A form 表B where条件 原来存在的表insert into 表A select * from 表B where 条件 INSERT INTO ... 
- Mysterious Bacteria LightOJ - 1220
			题意: 给出一个数x 求 x = bp 的p的最大值 解析: 算术基本定理 分解质因数 任何一个数x都可以表示为 x == p1a1 * p2a2 * ````` * pnan 即 b ... 
- MySQL将一张表的某些列数据,复制到另外一张表,并且修改某些内容
			MySQL将一张表的某些列数据,复制到另外一张表 INSERT INTO t_topic_content(content,topicId) SELECT content,id FROM t_topi ... 
- oracle导出导入数据库
			一.给空表分配空间: 这一步一定要做,否则空表不能导出. 首先连接你要导出的库,在该库上执行以下sql: select 'alter table '||table_name||' allocate e ... 
- BZOJ 5308 [ZJOI2018] Day2T2 胖 | 二分 ST表
			题目链接 LOJ 2529 BZOJ 5308 题解 这么简单的题 为什么考场上我完全想不清楚 = = 对于k个关键点中的每一个关键点\(a\),二分它能一度成为哪些点的最短路起点(显然这些点在一段包 ... 
- UOJ#7. 【NOI2014】购票 | 线段树 凸包优化DP
			题目链接 UOJ #7 题解 首先这一定是DP!可以写出: \[f[i] = \min_{ancestor\ j} \{f[j] + (d[j] - d[i]) * p[i] + q[i]\}\] 其 ... 
- yum 安装Mysql
			RHEL6.5-MySql-yum安装登录 客户端工具的使用mysql:Linux下提供了一个访问mysql服务器的客户端工具—mysql,其由mysql软件包提供,除了这些工具之外还有一些图形化界面 ... 
