2017-02-10 by 安静的下雪天 http://www.cnblogs.com/quiet-snowy-day/p/6387321.html
本篇概要
equals deepEquals hashCode hash
toString compare requireNonNull isNull nonNull
Objects 与 Object 区别
Objects 各方法介绍与分析
equals
现在,Objects.equals方法中已经做了非空判断,所以不会抛出空指针异常,它是null-save空指针安全的,而且也可以简化代码。
源码如下:
public static boolean equals(Object a, Object b) { return (a == b) || (a != null && a.equals(b)); }
deepEquals
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); }
简短的说明下Arrays.deepEquals0方法:
hashCode
public static int hashCode(Object o) { return o != null ? o.hashCode() : 0; }
Object支持hashCode方法是为了提高哈希表(例如java.util.Hashtable 提供的哈希表)的性能。
hash
public static int hash(Object... values) { return Arrays.hashCode(values); }
它是将所有的输入值都放到一个数组,然后调用Arrays.hashCode(Object[])方法来实现哈希码的生成。
@Override public int hashCode() { return Objects.hash(clazz, getReferenceKind(), name, getType()); }
警告:当提供的参数是一个对象的引用,返回值不等于该对象引用的散列码。这个值可以通过调用hashCode方法来计算。
toString
toString(Object o)
toString(Object o, String nullDefault)
返回指定对象的字符串表示形式。如果参数为空对象null,则返回第二个参数nullDefault所指定的对象。
compare
public static <T> int compare(T a, T b, Comparator<? super T> c) { return (a == b) ? 0 : c.compare(a, b); }
requireNonNull
requireNonNull(T obj)
检查指定类型的对象引用不为空null。当参数为null时,抛出空指针异常。设计这个方法主要是为了在方法、构造函数中做参数校验。
源码如下:
public static <T> T requireNonNull(T obj) { if (obj == null) throw new NullPointerException(); return obj; }
举个例子:
public class Foo { public Foo(Bar bar) { this.bar = Objects.requireNonNull(bar); } }
requireNonNull(T obj, String message)
public static <T> T requireNonNull(T obj, String message) { if (obj == null) throw new NullPointerException(message); return obj; }
requireNonNull(T obj, Supplier<String> messageSupplier)
public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier) { if (obj == null) throw new NullPointerException(messageSupplier.get()); return obj; }
isNull
判空方法,如果参数为空则返回true。从jdk1.8开始。
源码如下:
public static boolean isNull(Object obj) { return obj == null; }
static <T> Predicate<T> isEqual(Object targetRef) { return (null == targetRef) ? Objects::isNull // 双冒号,代表方法引用。 : object -> targetRef.equals(object); // 此处为lambda表达式。接收object对象,返回参数targetRef与该对象的比较结果。 }
nonNull
判断非空方法,如果参数不为空则返回true。从jdk1.8开始。
源码如下:
public static boolean nonNull(Object obj) { return obj != null; }
apiNote: 该方法的存在是用于java.util.function.Predicate类,filter(Objects::nonNull)。
如果觉得有帮助,请鼓励下博主吧:)