摘要:類方法分析聲明文章均為本人技術筆記,轉載請注明出處類簡介類是所有類的父類,在中只有基本數據類型不是對象。對于所有數組類型對象類型基本數據類型數組都繼承于類方法類中通過判斷兩個對象是否具有相同引用,從而判斷兩個對象是否相同子類只要重寫方法,就
Java Object類方法分析 聲明
文章均為本人技術筆記,轉載請注明出處https://segmentfault.com/u/yzwall
Object類簡介Object類是所有類的父類,在Java中只有基本數據類型不是對象。對于所有數組類型(對象類型&&基本數據類型數組)都繼承于Object類;
equals方法Object類中通過判斷兩個對象是否具有相同引用,從而判斷兩個對象是否相同;
子類只要重寫equals方法,就必須重寫hashCode方法
// in java.lang.Object public boolean equals(Object obj) { return (this == obj); }重寫equals方法原則:
自反性:A.equals(A)返回true;
對稱性:A.equals(B)結果和B.equals(A)相同;
傳遞性:A.equals(B)為true,B.equals(C)為true,則A.equals(C)為true
一致性:對于非null引用A,B, 只要equals()比較操作所用到對象信息不變,多次調用A.equals(B),結果一致;
對于任何非null引用,x.equals(null)必須返回false;
重寫equals方法時,參數類型必須為Object類型
重寫equals方法示例class myObject { private String name; private int age; ... public getName() { return this.name; } public getAge() { return this.age; } } /** * 重寫equals方法demo步驟 * Effective Java中推薦方式 */ public boolean equals(Object x) { // 1. 檢查x和this是否引用同一個對象 if (x == this) { return true; } // 2. 檢查x對象類型是否是myObject派生 if (!(x instanceof myObject)) { return false; } // 3. 比較數據域 // 經過1,2檢查,將參數轉換為正確類型 myObject o = (myObject)(x); return this.name.equals(x.getName()) && this.age == (x.getAge()); }hashCode()方法
hashCode方法返回對象的散列碼,相等對象必須返回相等的hashCode,不同對象的hashCode盡可能不相等;
// in java.lang.Object public native int hashCode();重寫equals時總要重寫hashCode
重寫equals不重寫hashCode,會導致“不相等對象擁有相同的hashCode”,導致集合類HashMap,HashSet和Hashtable無法工作;極端情況下,在散列表中使所有對象的hashCode都相等,所有對象都被映射到同一個桶中,散列表退化成鏈表;
當兩個對象調用equal返回true,則兩個對象各自調用hashCode()返回相同hashCode;
當兩個對象調用equal返回false, 兩個對象各自調用hashCode()返回的hashCode可以相同(散列沖突不能完全避免)
toString()方法Object類中toString方法,輸出對象的“對象類名@散列碼”;
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67023.html
摘要:作為條件變量的的不僅可以認為內嵌了一把鎖,還內嵌了一個條件變量。操作條件變量的函數將當前線程在條件變量上阻塞,一般是為了等待其他線程的某件事情執行完成。其它裝箱類其它裝箱類的代碼這里就不分析了。重點關注下各裝箱類的緩存范圍。 jdk源碼讀到現在這里,重要的集合類也讀了一部分了。集合類再往下讀的話,就要涉及到兩個方向。第一,是比較典型的但是不常用的數據結構,這部分我準備將數據結構復習、回...
摘要:作用負責將加載到中審查每個類由誰加載父優先的等級加載機制將字節碼重新解析成統一要求的對象格式類結構分析為了更好的理解類的加載機制,我們來深入研究一下和他的方法。就算兩個是同一份字節碼,如果被兩個不同的實例所加載,也會認為它們是兩個不同。 申明:本文首發于 詳細深入分析 ClassLoader 工作機制 ,如有轉載,注明原出處即可,謝謝配合。 什么是 ClassLoader ? 大家...
摘要:本文首發于作者最近在學,研究了下和代理模式,寫點心得和大家分享下。所以下面來重點分析下代理模式。這里代理模式分為靜態代理和動態代理兩種,我們分別來看下。代理模式,代理,意味著有一方代替另一方完成一件事。 本文首發于 https://jaychen.cc作者 jaychen 最近在學 Spring,研究了下 AOP 和代理模式,寫點心得和大家分享下。 AOP 先說下AOP,AOP 全稱 ...
摘要:程序中定義的變量是存儲在當中。判斷和是否相同,如果相同,那么表示是冗余的變量。示例冗余變量分析預期目標在下面的代碼中,會提示和局部變量是多余的我們的預期目標識別出和是冗余變量。 本文屬于Java ASM系列三:Tree API當中的一篇。 1. 如何判斷變量是否冗余 如果在IntelliJ IDEA當中編寫如下的代碼,它會提示str2和str3局部變量是多余的: ...
摘要:話說誰還干類似的事,就在文章末尾點個贊代銷店等其實就是現在的商店,以前小的時候聽家鄉人叫代銷店,也是一種代理模式。可以說是系統中最重要的架構之一。 showImg(https://segmentfault.com/img/remote/1460000012278678?w=1240&h=469); PS:轉載請注明出處作者: TigerChain地址: http://www.jians...
閱讀 3235·2021-11-23 09:51
閱讀 2480·2021-09-27 13:34
閱讀 2464·2021-09-08 09:45
閱讀 662·2019-08-30 15:44
閱讀 3493·2019-08-29 12:17
閱讀 2759·2019-08-26 12:18
閱讀 2622·2019-08-26 10:10
閱讀 3078·2019-08-23 18:02