2017-02-10 by 安靜的下雪天 http://www.cnblogs.com/quiet-snowy-day/p/6387321.html html
equals deepEquals hashCode hashjava
toString compare requireNonNull isNull nonNull算法
如今,Objects.equals方法中已經作了非空判斷,因此不會拋出空指針異常,它是null-save空指針安全的,並且也能夠簡化代碼。api
源碼以下:數組
public static boolean equals(Object a, Object b) { return (a == b) || (a != null && a.equals(b)); }
返回目錄安全
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方法:oracle
返回目錄ide
public static int hashCode(Object o) { return o != null ? o.hashCode() : 0; }
Object支持hashCode方法是爲了提升哈希表(例如java.util.Hashtable 提供的哈希表)的性能。函數
返回目錄工具
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方法來計算。
返回指定對象的字符串表示形式。若是參數爲空對象null,則返回第二個參數nullDefault所指定的對象。
public static <T> int compare(T a, T b, Comparator<? super T> c) { return (a == b) ? 0 : c.compare(a, b); }
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); } }
public static <T> T requireNonNull(T obj, String message) { if (obj == null) throw new NullPointerException(message); return obj; }
public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier) { if (obj == null) throw new NullPointerException(messageSupplier.get()); return obj; }
判空方法,若是參數爲空則返回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與該對象的比較結果。 }
判斷非空方法,若是參數不爲空則返回true。從jdk1.8開始。
源碼以下:
public static boolean nonNull(Object obj) { return obj != null; }
apiNote: 該方法的存在是用於java.util.function.Predicate類,filter(Objects::nonNull)。
若是以爲有幫助,請鼓勵下博主吧:)