java java.util.objects

引言
Java是一种面向对象的编程语言,它提供了许多内置类和接口来帮助开发人员更方便地处理对象。其中,java.util.Objects类是一个常用的工具类,它提供了一些静态方法来处理对象。本文将详细介绍java.util.Objects类,并介绍其常用方法以及实际应用场景。
一、java.util.Objects类概述
在Java 7中引入的java.util.Objects类是一个工具类,位于java.util包内,旨在提供一些有用的方法来处理对象。该类包含了一组静态方法,用于比较、处理和操作对象。下面是java.util.Objects类的UML类图:
+------------------------------------------------------------+
| Objects |
+------------------------------------------------------------+
| +compare(a: T, b: T): int |
| +deepEquals(a: Object, b: Object): boolean |
| +equals(a: Object, b: Object): boolean |
| +hashCode(o: Object): int |
| +isNull(obj: Object): boolean |
| +nonNull(obj: Object): boolean |
| +requireNonNull(obj: T): T |
| +requireNonNull(obj: T, message: String): T |
| +requireNonNull(obj: T, supplier: Supplier<T>): T |
+------------------------------------------------------------+
从上面的UML类图可以看出,java.util.Objects类提供了以下常用方法:
compare(a, b):比较两个对象的大小,返回一个int值。deepEquals(a, b):深度比较两个对象的值是否相等。equals(a, b):比较两个对象是否相等。hashCode(o):返回指定对象的哈希码。isNull(obj):判断指定对象是否为null。nonNull(obj):判断指定对象是否不为null。requireNonNull(obj):要求指定对象不为null,否则会抛出NullPointerException异常。如果对象为null,则会使用默认的错误信息。requireNonNull(obj, message):要求指定对象不为null,否则会抛出NullPointerException异常。如果对象为null,则会使用指定的错误信息。requireNonNull(obj, supplier):要求指定对象不为null,否则会抛出NullPointerException异常。如果对象为null,则会使用由Supplier提供的错误信息。
二、java.util.Objects常用方法详解
1. compare(a, b)
该方法用于比较两个对象的大小,返回一个int值。如果a小于b,则返回负数;如果a大于b,则返回正数;如果a等于b,则返回0。
示例代码如下:
int result = Objects.compare("apple", "banana", (o1, o2) -> o1.length() - o2.length());
System.out.println(result);
代码运行结果:
-2
上述示例中,我们使用compare方法比较了字符串”apple”和”banana”的长度。由于”apple”的长度小于”banana”,所以返回结果为-2。
2. deepEquals(a, b)
该方法用于深度比较两个对象的值是否相等,返回一个布尔值。如果两个对象的值相等,则返回true;否则返回false。
示例代码如下:
String[] arr1 = {"apple", "banana", "cherry"};
String[] arr2 = {"apple", "banana", "cherry"};
boolean result = Objects.deepEquals(arr1, arr2);
System.out.println(result);
代码运行结果:
true
上述示例中,我们使用deepEquals方法比较了两个字符串数组的值是否相等。由于两个数组的每个元素都相同,所以返回结果为true。
3. equals(a, b)
该方法用于比较两个对象是否相等,返回一个布尔值。如果两个对象相等,则返回true;否则返回false。
示例代码如下:
String str1 = "hello";
String str2 = "hello";
boolean result = Objects.equals(str1, str2);
System.out.println(result);
代码运行结果:
true
上述示例中,我们使用equals方法比较了两个字符串是否相等。由于两个字符串的值相同,所以返回结果为true。
4. hashCode(o)
该方法用于返回指定对象的哈希码,返回一个int值。
示例代码如下:
String str = "hello";
int hashCode = Objects.hashCode(str);
System.out.println(hashCode);
代码运行结果:
99162322
上述示例中,我们使用hashCode方法获取了字符串”hello”的哈希码。
5. isNull(obj)和nonNull(obj)
isNull(obj)方法用于判断指定对象是否为null,返回一个布尔值。如果对象为null,则返回true;否则返回false。nonNull(obj)方法则与isNull(obj)相反。
示例代码如下:
String str = null;
boolean isNull = Objects.isNull(str);
boolean nonNull = Objects.nonNull(str);
System.out.println(isNull);
System.out.println(nonNull);
代码运行结果:
true
false
上述示例中,我们使用isNull和nonNull方法判断了一个字符串是否为null。
6. requireNonNull(obj)
该方法用于要求指定对象不为null,否则会抛出NullPointerException异常。如果对象为null,则会使用默认的错误信息。
示例代码如下:
String str = null;
Objects.requireNonNull(str);
代码运行结果:
Exception in thread "main" java.lang.NullPointerException
上述示例中,我们使用requireNonNull方法要求一个字符串不为null。由于字符串str为null,所以抛出了NullPointerException异常。
7. requireNonNull(obj, message)和requireNonNull(obj, supplier)
requireNonNull(obj, message)方法与requireNonNull(obj)方法类似,但是可以自定义错误信息。requireNonNull(obj, supplier)方法则与requireNonNull(obj, message)方法类似,但是可以使用Supplier提供错误信息。
示例代码如下:
String str = null;
Objects.requireNonNull(str, "The given string is null.");
代码运行结果:
Exception in thread "main" java.lang.NullPointerException: The given string is null.
上述示例中,我们使用requireNonNull方法要求一个字符串不为null,并自定义了错误信息。
极客教程