Java基礎:(五)Object通用方法
阿新 • • 發佈:2019-03-13
() t對象 bsp new cto struct hashcode col notify
一、Object對象的九個方法
getClass();hashCode();equals();clone();toString();notify();notifyAll();wait();finalize。
二、equals()
equals()與==的區別:
- 對於基本類型,==判斷兩個值是否相等,基本類型沒有equals()方法(八個基本類型);
- 對於引用類型,==判斷兩個實例是否引用同一個對象(地址是否相同),而equals()判斷引用的對象是否等價(值是否相等)。
對任何不是null的對象x調用x.equals(null)結果都為false;但是x如果為null,x.equals(null)在編譯時沒有錯誤,運行時報錯。
Integer x = 1; x.equals(null); //結果為false Integer x = null; x.equals(null); //運行報錯
三、hashCode()
hashCode()返回散列值,而equals()是用來判斷兩個實例是否等價。等價的兩個實例散列值一定要相同,但是散列值相同的兩個實例不一定等價;
在覆蓋equals()方法時應當總是覆蓋hashCode()方法,保證等價的兩個實例散列值也相等。
四、toString()
默認返回 ToStringExample@xxxxxx 這種形式,其中@後面的數值為散列碼的無符號十六進制表示。
五、clone()
淺拷貝:拷貝實例和原始實例的引用類型指向同一個對象(相當於同一個對象);
深拷貝:拷貝實例和原始實例的引用類型指向不同的對象(相當於復制了一個新對象)。
使用clone()方法來拷貝一個對象既復雜又有風險,它會拋出異常,並且還需要類型轉換;最好不要使用clone(),可以使用拷貝構造函數或者拷貝工廠來拷貝一個對象(相當於復制了一個新對象)。
public class CloneConstructorExample { private int[] arr; public CloneConstructorExample(){ arr= new int[10]; for(int i=0;i<arr.length;i++){ arr[i] = i; } } //拷貝構造函數 public CloneConstructorExample(CloneConstructorExample original){ arr = new int[original.arr.length]; for(int i=0;i<original.arr.length;i++){ arr[i] = original.arr[i]; } } }
Java基礎:(五)Object通用方法