java面試題4
1.在 jdk1.5 中,引入了泛型,泛型的存在是用來解決什麼問題
泛型的本質是引數化型別,也就是說所操作的資料型別被指定為一個引數,能夠解決程式碼複用的問題。常見的一種情況是,你有一個函式,它帶有一個引數,引數型別是A,然而當引數型別改變成B的時候,你不得不復制這個函式。除此之外泛型的好處是在編譯的時候檢查型別安全,並且所有的強制轉換都是自動和隱式的,消除顯示的型別強制轉換,以提高程式碼的重用率。
使用方法:
public class Stack<T>{
private T[] m_item;
public T Pop(){...}
public void Push(T item){...}
public Stack(int i)
{
this.m_item = new T[i];
}
}
類的寫法不變,只是引入了通用資料型別T就可以適用於任何資料型別,並且型別安全的。這個類的呼叫方法:
//例項化只能儲存int型別的類
Stack<int> a = new Stack<int>(100);
a.Push(10);
a.Push("8888"); //這一行編譯不通過,因為類a只接收int型別的資料
int x = a.Pop();
//例項化只能儲存string型別的類
Stack<string> b = new Stack<string>(100);
b.Push(10); //這一行編譯不通過,因為類b只接收string型別的資料
b.Push("8888");
string y = b.Pop();
2.這樣的 a.hashcode() 有什麼用,與 a.equals(b)有什麼關係
hashcode()方法提供了物件的hashCode值,是一個native方法,返回的預設值與System.identityHashCode(obj)一致。通常這個值是物件頭部的一部分二進位制位組成的數字,具有一定的標識物件的意義存在,但絕不定於地址。
作用是:用一個數字來標識物件。比如在HashMap、HashSet等類似的集合類中,如果用某個物件本身作為Key,即要基於這個物件實現Hash的寫入和查詢,那麼物件本身如何實現這個呢?就是基於hashcode這樣一個數字來完成的,只有數字才能完成計算和對比操作。
equals與hashcode的關係:equals相等的兩個物件,則重寫後的hashcode一定要相等。但是hashcode相等的兩個物件equals不一定相等。
3.深拷貝和淺拷貝區別
● 淺拷貝只是對指標的拷貝,拷貝後兩個指標指向同一個記憶體空間。
● 深拷貝(.clone())不但對指標進行拷貝,而且對指標指向的內容進行拷貝,經深拷貝後的指標是指向兩個不同地址的指標。