JDK7新增Objects方法介绍(同时包含JDK8新添加的方法)
###前言:
JDK7里面新增的Objects类,该类的主要用途是将操作对象的一切常用操作进行的封装。包括hashCode、equals等。 本文是以java8版本介绍Objects类,所以也会介绍一下java8新增的方法。下面进入正题:12
###知识点一:Objects类简介:
/**
* 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、为对象返回一个字符串表示、比较两个对象
从j.7开始添加该类
12345678910111213###知识点二:Objects特点
1.该类是使用final修饰,不能被继承 2.该类的构造方法被私有化(使用private修饰),不能直接创建对象 3.该类中所有的方法都是静态方法,可以使用类型直接调用(对应2,该类不需要创建对象)123
####源码截图:
###知识点三:Objects内方法介绍
//比较两个对象是否相等(首先比较内存地址,然后比较a.equals(b),只要符合其中之一返回true) public static boolean equals(Object a, Object b); //深度比较两个对象是否相等(首先比较内存地址,相同返回true;如果传入的是数组,则比较数组内的对应下标值是否相同) public static boolean deepEquals(Object a, Object b); //返回对象的hashCode,若传入的为null,返回0 public static int hashCode(Object o); //返回传入可变参数的所有值的hashCode的总和(这里说总和有点牵强,具体参考Arrays.hashCode()方法) public static int hash(Object... values); //返回对象的String表示,若传入null,返回null字符串 public static String toString(Object o) //返回对象的String表示,若传入null,返回默认值nullDefault public static String toString(Object o, String nullDefault) //使用指定的比较器c 比较参数a和参数b的大小(相等返回0,a大于b返回整数,a小于b返回负数) public static <T> int compare(T a, T b, Comparator<? super T> c) //如果传入的obj为null抛出NullPointerException,否者返回obj public static <T> T requireNonNull(T obj) //如果传入的obj为null抛出NullPointerException并可以指定错误信息message,否者返回obj public static <T> T requireNonNull(T obj, String message) -----------------------------以下是jdk8新增方法--------------------------- //判断传入的obj是否为null,是返回true,否者返回false public static boolean isNull(Object obj) //判断传入的obj是否不为null,不为空返回true,为空返回false (和isNull()方法相反) public static boolean nonNull(Object obj) //如果传入的obj为null抛出NullPointerException并且使用参数messageSupplier指定错误信息,否者返回obj public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier)12345678910111213141516171819202122232425262728293031323334353637
###知识点四:案例
下面简单测试了几个方法:
package cn.cupcat.java8;
import org.junit.Test;
import java.util.Comparator;
import java.util.Objects;
/**
* Created by xy on 2017/12/25.
*/
public class ObjectsTest {
/**
* 因为Objects类比较简单,所以只用这一个测试用例进行测试
* */
@Test
public void equalsTest(){
String str1 = "hello";
String str2 = "hello";
//传入对象
//Objects.equals(str1, str2) ? true
boolean equals = Objects.equals(str1, str2);
System.out.println("Objects.equals(str1, str2) ? "+ equals);
}
@Test
public void deepEqualsTest(){
String str1 = "hello";
String str2 = "hello";
//传入对象
boolean deepEquals = Objects.deepEquals(str1, str2);
//Objects.deepEquals(str1, str2) ? true
System.out.println("Objects.deepEquals(str1, str2) ? "+ deepEquals);
int[] arr1 = {1,2};
int[] arr2 = {1,2};
//传入数组
deepEquals = Objects.deepEquals(arr1, arr2);
//Objects.deepEquals(arr1, arr2) ? true
System.out.println("Objects.deepEquals(arr1, arr2) ? "+ deepEquals);
}
@Test
public void hashCodeTest(){
String str1 = "hello";
//传入对象
int hashCode = Objects.hashCode(str1);
//Objects.hashCode(str1) ? 99162322
System.out.println("Objects.hashCode(str1) ? "+ hashCode);
//传入null
hashCode = Objects.hashCode(null);
//Objects.hashCode(null) ? 0
System.out.println("Objects.hashCode(null) ? "+ hashCode);
}
@Test
public void hashTest(){
int a = 100;
//传入对象
int hashCode = Objects.hashCode(a);
//Objects.hashCode(str1) ? 100
System.out.println("Objects.hashCode(str1) ? "+ hashCode);
//输入数组
int[] arr = {100,100};
hashCode = Objects.hash(arr);
//Objects.hashCode(arr) ? 1555093793
System.out.println("Objects.hashCode(arr) ? "+ hashCode);
}
@Test
public void compareTest(){
int a = 10;
int b = 11;
int compare = Objects.compare(a, b, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
});
// compare = -1
System.out.println(" compare = "+ compare);
}
@Test
public void requireNonNullTest(){
String test = null;
//java.lang.NullPointerException
// String s = Objects.requireNonNull(test);
//java.lang.NullPointerException: 这是空指针异常提示的信息
//String s = Objects.requireNonNull(test, "这是空指针异常提示的信息");
//java.lang.NullPointerException: 我是返回的异常信息
String s = Objects.requireNonNull(test,()->"我是返回的异常信息");
}
}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107###知识点五:总结
Objects类给我们提供了一些常用的操作对象的方法,我们可以直接使用,这是非常方便的。尤其是requireNonNull()方法, 在我们写方法时需要判断传入的参数是否为null可以使用该方法及其方便。12
本人的个人博客地址:https://elfgirl.top/
暂无标签
评论功能已关闭