1. 程式人生 > >Java基礎:(五)Object通用方法

Java基礎:(五)Object通用方法

() 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通用方法