|
|
|
@ -1,5 +1,5 @@ |
|
|
|
|
/* |
|
|
|
|
* Copyright 2002-2015 the original author or authors. |
|
|
|
|
* Copyright 2002-2016 the original author or authors. |
|
|
|
|
* |
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
@ -277,14 +277,14 @@ public abstract class ObjectUtils { |
|
|
|
|
//---------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Determine if the given objects are equal, returning {@code true} |
|
|
|
|
* if both are {@code null} or {@code false} if only one is |
|
|
|
|
* {@code null}. |
|
|
|
|
* Determine if the given objects are equal, returning {@code true} if |
|
|
|
|
* both are {@code null} or {@code false} if only one is {@code null}. |
|
|
|
|
* <p>Compares arrays with {@code Arrays.equals}, performing an equality |
|
|
|
|
* check based on the array elements rather than the array reference. |
|
|
|
|
* @param o1 first Object to compare |
|
|
|
|
* @param o2 second Object to compare |
|
|
|
|
* @return whether the given objects are equal |
|
|
|
|
* @see Object#equals(Object) |
|
|
|
|
* @see java.util.Arrays#equals |
|
|
|
|
*/ |
|
|
|
|
public static boolean nullSafeEquals(Object o1, Object o2) { |
|
|
|
@ -298,33 +298,47 @@ public abstract class ObjectUtils { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
if (o1.getClass().isArray() && o2.getClass().isArray()) { |
|
|
|
|
if (o1 instanceof Object[] && o2 instanceof Object[]) { |
|
|
|
|
return Arrays.equals((Object[]) o1, (Object[]) o2); |
|
|
|
|
} |
|
|
|
|
if (o1 instanceof boolean[] && o2 instanceof boolean[]) { |
|
|
|
|
return Arrays.equals((boolean[]) o1, (boolean[]) o2); |
|
|
|
|
} |
|
|
|
|
if (o1 instanceof byte[] && o2 instanceof byte[]) { |
|
|
|
|
return Arrays.equals((byte[]) o1, (byte[]) o2); |
|
|
|
|
} |
|
|
|
|
if (o1 instanceof char[] && o2 instanceof char[]) { |
|
|
|
|
return Arrays.equals((char[]) o1, (char[]) o2); |
|
|
|
|
} |
|
|
|
|
if (o1 instanceof double[] && o2 instanceof double[]) { |
|
|
|
|
return Arrays.equals((double[]) o1, (double[]) o2); |
|
|
|
|
} |
|
|
|
|
if (o1 instanceof float[] && o2 instanceof float[]) { |
|
|
|
|
return Arrays.equals((float[]) o1, (float[]) o2); |
|
|
|
|
} |
|
|
|
|
if (o1 instanceof int[] && o2 instanceof int[]) { |
|
|
|
|
return Arrays.equals((int[]) o1, (int[]) o2); |
|
|
|
|
} |
|
|
|
|
if (o1 instanceof long[] && o2 instanceof long[]) { |
|
|
|
|
return Arrays.equals((long[]) o1, (long[]) o2); |
|
|
|
|
} |
|
|
|
|
if (o1 instanceof short[] && o2 instanceof short[]) { |
|
|
|
|
return Arrays.equals((short[]) o1, (short[]) o2); |
|
|
|
|
} |
|
|
|
|
return arrayEquals(o1, o2); |
|
|
|
|
} |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Compare the given arrays with {@code Arrays.equals}, performing an equality |
|
|
|
|
* check based on the array elements rather than the array reference. |
|
|
|
|
* @param o1 first array to compare |
|
|
|
|
* @param o2 second array to compare |
|
|
|
|
* @return whether the given objects are equal |
|
|
|
|
* @see #nullSafeEquals(Object, Object) |
|
|
|
|
* @see java.util.Arrays#equals |
|
|
|
|
*/ |
|
|
|
|
private static boolean arrayEquals(Object o1, Object o2) { |
|
|
|
|
if (o1 instanceof Object[] && o2 instanceof Object[]) { |
|
|
|
|
return Arrays.equals((Object[]) o1, (Object[]) o2); |
|
|
|
|
} |
|
|
|
|
if (o1 instanceof boolean[] && o2 instanceof boolean[]) { |
|
|
|
|
return Arrays.equals((boolean[]) o1, (boolean[]) o2); |
|
|
|
|
} |
|
|
|
|
if (o1 instanceof byte[] && o2 instanceof byte[]) { |
|
|
|
|
return Arrays.equals((byte[]) o1, (byte[]) o2); |
|
|
|
|
} |
|
|
|
|
if (o1 instanceof char[] && o2 instanceof char[]) { |
|
|
|
|
return Arrays.equals((char[]) o1, (char[]) o2); |
|
|
|
|
} |
|
|
|
|
if (o1 instanceof double[] && o2 instanceof double[]) { |
|
|
|
|
return Arrays.equals((double[]) o1, (double[]) o2); |
|
|
|
|
} |
|
|
|
|
if (o1 instanceof float[] && o2 instanceof float[]) { |
|
|
|
|
return Arrays.equals((float[]) o1, (float[]) o2); |
|
|
|
|
} |
|
|
|
|
if (o1 instanceof int[] && o2 instanceof int[]) { |
|
|
|
|
return Arrays.equals((int[]) o1, (int[]) o2); |
|
|
|
|
} |
|
|
|
|
if (o1 instanceof long[] && o2 instanceof long[]) { |
|
|
|
|
return Arrays.equals((long[]) o1, (long[]) o2); |
|
|
|
|
} |
|
|
|
|
if (o1 instanceof short[] && o2 instanceof short[]) { |
|
|
|
|
return Arrays.equals((short[]) o1, (short[]) o2); |
|
|
|
|
} |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
@ -335,6 +349,7 @@ public abstract class ObjectUtils { |
|
|
|
|
* this method will delegate to any of the {@code nullSafeHashCode} |
|
|
|
|
* methods for arrays in this class. If the object is {@code null}, |
|
|
|
|
* this method returns 0. |
|
|
|
|
* @see Object#hashCode() |
|
|
|
|
* @see #nullSafeHashCode(Object[]) |
|
|
|
|
* @see #nullSafeHashCode(boolean[]) |
|
|
|
|
* @see #nullSafeHashCode(byte[]) |
|
|
|
|