java中equals的另类用法以及Objects中其他方法介绍

版权声明:转载请注明出处,谢谢! https://blog.csdn.net/qq_34872748/article/details/84379476

equals方法对于java程序员来说应该是常用的方法,它通常用来对字符串类型的比较,通常,我们的写法是这样:

//案例1
Map<String,Object> map1  = new HashMap<>();
Map<String,Object> map2 = new HashMap<>();
map1.put("a","1");
map2.put("a","1");
//在业务中,由于我们通常不知道map中的value是否有值,所以,一般是这样:
if(null != map1.get("a") && map1.get("a").equals(map2.get("a"))){
	System.out.println("ok");
}
//jdk1.7后,我们其实可以这样
//案例2
Map<String,Object> map1  = new HashMap<>();
Map<String,Object> map2 = new HashMap<>();
map1.put("a","1");
map2.put("a","1");
if(Objects.equals(map1.get("a"), map2.get("a"))) {
	system.out.println("ok");
}


两个案例对比,我们发现案例2比案例1少那么一点代码,在实际应用中,我们用Objects.equels(Object a , Object b)无需增加null判断,避免java.lang.NullPointException异常,尤其是对于业务量大,任务繁多,加班猛的我们,更需要简单而高效的办法了,不然,稍不留神,忽略value=null这个情况,又得撸起袖子debug了。。。。。
下面,我们了解了解Objects这玩意–》
1 简介:

/**
 * This class consists of {@code static} utility methods for operating
 * on objects.  These utilities include {@code null}-safe or {@code
 * null}-tolerant methods for computing the hash code of an object,
 * returning a string for an object, and comparing two objects.
 *
 * @since 1.7
 */
/**大概翻译: 
     本类由一些操作对象的静态工具方法构成,这些工具方法包括了非空检查、方法的非空参数检查、
     比较对象的hashCode、为对象返回一个字符串表示、比较两个对象
  从jdk1.7后添加该类
  */

2 特点:

在这里插入图片描述

  1. Objects类被final类修饰,表示该类不能被继承。
  2. Objects类的构造方法是被private修饰,表示不能直接创建对象被外部调用。
  3. Objects类下的方法全部都是static修饰,可以直接调用。

3 方法介绍:
在这里插入图片描述//equals方法 两种比较方式,1是比较两者的内存地址是否相等,2是在非null的情况下直接比较两者的值是否相等,两个比较中一个成立则返回true
在这里插入图片描述//deepEquals深度比较,1是比较两者的内存地址是否相等,2是两者中只要存在null就返回false,3是如果传入的是数组类型,则比较两者的下标对应的值是否相等。
在这里插入图片描述//hashCode方法 返回的是入参的hashCode数
在这里插入图片描述//hash方法 返回一个基于内容的哈希码
在这里插入图片描述//toString方法 将入参转为字符串类型(插曲:几年前之前在学校有同学问我,int类型怎么转String,我去,纠结了好久,后来想到在后面+"",现在,我们还可以这样玩。。。。),如果传入null,也不会报错,返回null
在这里插入图片描述//compare方法 使用指定的比较器c 比较参数a和参数b的大小(相等返回0,a大于b返回整数,a小于b返回负数)
在这里插入图片描述//requireNonNull方法 判断传入的对象是否null,是null直接返回空指针异常。
在这里插入图片描述//isNull方法 判断对象是否是null,如果是null返回true,不是返回false.
在这里插入图片描述nonNull方法 判断对象是否不等于null,如果是返回true,否则返回false.
在这里插入图片描述requireNonNull方法 如果传入的obj为null抛出NullPointerException并可以指定错误信息message,否者返回该对象

4 小结

  1. Objects类中为我们提供了丰富的判断比较方法,简化了很多额外代码,有利于代码的优化。
  2. 增加了程序的健壮性。
  3. 通过查看并学习源码,我们可以从设计者的角度考虑问题,分析问题,解决问题,这让我们的思想更进一步得到提升,这就是伟大的“java编程思想”!

猜你喜欢

转载自blog.csdn.net/qq_34872748/article/details/84379476