### Question:
Util { public static boolean nullSafeEquals(Object o1, Object o2) { if (o1 == null) { return o2 == null; } if (o1.getClass().isArray()) { EqualsBuilder builder = new EqualsBuilder(); builder.append(o1, o2); return builder.isEquals(); } else { return o1.equals(o2); } }  static File toFile(URL url); static String stringFromFile(File file); static String stringFromFile(File file, String joinWith); static String join(Iterable<?> objects, String separator); static String substBackslashes(String string); static Throwable unwindException(Throwable th); static boolean nullSafeEquals(Object o1, Object o2); static int nullSafeCompare(boolean nullsFirst, Comparable<T> o1, T o2); static boolean isEmptyString(CharSequence string); static boolean isBlank(CharSequence cs); static boolean isNumeric(CharSequence cs); static int countMatches(final String str, final String sub); static String capitalized(String name); static String uncapitalized(String aString); @SuppressWarnings("unchecked") static T cloneViaSerialization(T object); static XMLReader createXmlReader(); static Document readDocument(URL url); static String getPackagePath(String className); static String stripPackageName(String className); static Map<K, V> toMap(K[] keys, V[] values); static String extractFileExtension(String fileName); static String stripFileExtension(String fileName); static String stripLineBreaks(String string, char replaceWith); static String encodeXmlAttribute(String string); static String prettyTrim(String str, int maxLength); static Iterator<T> sortedIterator(Iterator<T> it, Comparator<T> comparator); static int hashCode(Collection<?> c); static Pattern sqlPatternToPattern(String pattern, boolean ignoreCase); static boolean isAccessible(Member member); @Deprecated static Class<?> getJavaClass(String className); static String underscoredToJava(String name, boolean capitalize); static String specialCharsToJava(String string);  }### Answer:
@Test public void testNullSafeEquals() throws Exception { class CloneableObject implements Cloneable { @Override public Object clone() throws CloneNotSupportedException { return super.clone(); } @Override public boolean equals(Object obj) { if (obj == null) return false; return obj.getClass() == this.getClass(); } } CloneableObject o1 = new CloneableObject(); Object o2 = new Object(); Object o3 = o1.clone(); assertTrue(o3.equals(o1)); assertTrue(Util.nullSafeEquals(o1, o1)); assertFalse(Util.nullSafeEquals(o1, o2)); assertTrue(Util.nullSafeEquals(o1, o3)); assertFalse(Util.nullSafeEquals(o1, null)); assertFalse(Util.nullSafeEquals(null, o1)); assertTrue(Util.nullSafeEquals(null, null)); }