目录
checkFromIndexSize(int fromIndex, int size, int length)
checkFromToIndex(int fromIndex, int toIndex, int length)
checkIndex(int index, int length)
deepEquals(Object a, Object b)
toString(Object o, String nullDefault)
介绍
此类包含static
实用程序方法,用于操作对象或在操作前检查某些条件。 这些实用程序 包括null
或null
方法,用于计算对象的哈希代码,返回对象的字符串,比较两个对象,以及 检查索引或子范围值是否超出范围。
Objets位于java.util 下,extends Object。主要处理空指针安全的问题,所谓空指针就是 说在引用一个空对象的方法时,会抛出NullPointerException空指针异常。
Objects类中所有的方法都是静态的,不需要实例化对象再调用,可直接通过类名进行调 用。
方法
checkFromIndexSize(int fromIndex, int size, int length)
作用:检查是否在子范围从fromIndex(包括)到fromIndex+size(不包括)是范围界限 内0(包括)到length(不包括)
如果以下任何不等式为真,则子范围被定义为超出界限:
fromIndex < 0
size < 0
fromIndex + size >length,考虑到整数溢出
length < 0
参数:
fromIndex - 子间隔的下限(包括)
size - 子范围的大小
length - 范围的上限(不包括)
返回结果:
如果符合则返回1,不符合则抛出异常:IndexOutOfBoundsException
版本:9
TEST:
package com.java;
import java.util.Objects;
public class Test {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
int res = Objects.checkFromIndexSize(1, 3, arr.length);
System.out.println(res);
// 1
int res1 = Objects.checkFromIndexSize(0, 6, arr.length);
System.out.println(res1);
// IndexOutOfBoundsException: Range [0, 0 + 6) out of bounds for length 5
}
}
checkFromToIndex(int fromIndex, int toIndex, int length)
作用:检查是否在子范围从fromIndex
(包括)到toIndex
(不包括)是范围界限内0
(包 括)到length
(不包括)。
如果以下任何不等式为真,则子范围被定义为超出界限:
fromIndex < 0
fromIndex > toIndex
toIndex > length
length < 0
,这是前者的不平等所暗示的
参数:
fromIndex
- 子范围的下限(包括)
toIndex
- 子范围的上限(不包括)
length
- 上限(不包括)范围
返回结果:
如果子范围内的范围内,返回fromIndex;如果子范围超出范围则抛出异常: IndexOutOfBoundsException。
版本:9
TEST:
package com.java;
import java.util.Objects;
public class Test {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
int res = Objects.checkFromToIndex(2,5,arr.length);
System.out.println(res); // 2
}
}
checkIndex(int index, int length)
作用:检查index
是否在0
(含)到length
(不包括)范围内。
如果以下任何不等式为真,则定义index超出范围:
index < 0
index >= length
length < 0
参数:
index - 该指数
length - 范围的上限(不包括)
返回结果:如果在范围内,返回index;如果index超出界限,抛出异常: IndexOutOfBoundsException
版本:9
TEST:
package com.java;
import java.util.Objects;
public class Test {
public static void main(String[] args) {
int res = Objects.checkIndex(4,arr.length);
System.out.println(res); // 4
}
}
equals(object a, object b)
作用:判断参数的引用地址是否相等,分为以下情况:
1、参数皆为null,返回true;
2、参数皆为字符串且为空(""),返回true;
3、其中一个参数为null 或 “”,另一个参数不为null 或 “”,都返回false。
参数:
a - 一个对象
b - 要与a进行比较以获得相等性的对象
使用方法:
package com.java;
import java.util.Objects;
public class Test {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
int[] arr1 = {1,2,3,4,5};
boolean res = Objects.equals(arr,arr1);
System.out.println(res); // false
}
}
注意:不会抛出空指针异常
源码:
public static boolean equals(Object a, Object b) {
// 先对引用地址进行判断,再进行判断是否为null
return (a == b) || (a != null && a.equals(b));
}
deepEquals(Object a, Object b)
作用:不仅比较数值是否相等,同时也要比较对象中的内容是否相同,相同返回true
使用:
package com.java;
import javax.management.ObjectName;
import java.util.Objects;
public class Test {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
int[] arr1 = {1,2,3,4,5};
boolean res = Objects.equals(arr,arr1);
boolean res1 = Objects.deepEquals(arr,arr1);
System.out.println(res); // false
System.out.println(res1); // 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);
}
hash(Object... values) 和 hashCode(Object o)
作用:前者为一系列输入值生成哈希码
后者也是为输入值生成哈希码
使用:
package com.java;
import javax.management.ObjectName;
import javax.naming.event.ObjectChangeListener;
import java.util.Objects;
public class Test {
public static void main(String[] args) {
int res = Objects.hashCode("a");
int res1 = Objects.hash("a");
System.out.println(res); // 97
System.out.println(res1); // 128
}
}
源码:
public static int hashCode(Object o) {
return o != null ? o.hashCode() : 0;
}
参数: o - 一个对象
返回结果:不为null时,返回哈希码;为null时,返回0。
public static int hash(Object... values) {
return Arrays.hashCode(values);
}
// Arrays.java
public static int hashCode(Object a[]) {
if (a == null)
return 0;
int result = 1;
for (Object element : a)
result = 31 * result + (element == null ? 0 : element.hashCode());
return result;
}
- 为一系列输入值生成哈希码。 生成哈希码,好像所有输入值都放在一个数组中,并通过调用Arrays.hashCode(Object[])对该数组进行哈希处理 。
-
此方法对于在包含多个字段的对象上实现Object.hashCode()非常有用。 例如,如果有三个字段,对象
x
,y
,和z
,一个可以这样写:@Override public int hashCode() { return Objects.hash(x, y, z); }
-
参数: values - 要散列的值
返回结果:输入值序列的哈希值,在hash值的基础上 + 31*result
isNull(Object o)
作用:用来判断是否为null
参数:o
- 针对 null
进行检查的参考
返回结果:如果为null,则返回true,否则false
TEST:
package com.java;
import javax.management.ObjectName;
import javax.naming.event.ObjectChangeListener;
import java.util.Objects;
public class Test {
public static void main(String[] args) {
boolean b = Objects.isNull(null);
boolean b1 = Objects.isNull("123");
System.out.println(b); // true
System.out.println(b1); // false
}
}
源码:
public static boolean isNull(Object obj) {
return obj == null;
}
nonNull(Object o)
作用:和isNull相反
TEST:
package com.java;
import javax.management.ObjectName;
import javax.naming.event.ObjectChangeListener;
import java.util.Objects;
public class Test {
public static void main(String[] args) {
boolean b = Objects.nonNull(null);
boolean b1 = Objects.nonNull("123");
System.out.println(b); // false
System.out.println(b1); // true
}
}
源码:
public static boolean nonNull(Object obj) {
return obj != null;
}
toString(Object o)
作用:判断是否为null
参数: o
返回结果:如果是null,返回null;否则返回o。
TEST:
package com.java;
import javax.management.ObjectName;
import javax.naming.event.ObjectChangeListener;
import java.util.Objects;
public class Test {
public static void main(String[] args) {
String s = "welcome";
String s1 = null;
System.out.println(Objects.toString(s)); // welcome
System.out.println(Objects.toString(s1)); // null
}
}
源码:
public static String toString(Object o) {
return String.valueOf(o);
}
// String.java
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
toString(Object o, String nullDefault)
作用:用来判断是否为 null
参数: o - 对象
nullDefault - 如果第一个参数是null,返回的字符串
返回结果:
如果第一个参数为null,则返回第二个参数;如果不为null,则返回第一个参数
TEST:
package com.java;
import javax.management.ObjectName;
import javax.naming.event.ObjectChangeListener;
import java.util.Objects;
public class Test {
public static void main(String[] args) {
System.out.println(Objects.toString(null, "welcome")); // welcome
System.out.println(Objects.toString("123","welcome")); // 123
}
}
源码:
public static String toString(Object o, String nullDefault) {
return (o != null) ? o.toString() : nullDefault;
}