Java面試題記錄第二天
Java面試題記錄第二天
1.簡單的Hello World輸出!
-------------------------------------要注意靜態程式碼塊!-----------------------------------------
package JavaTest;
public class Hello {
static {
System.out.println("看這裡,我是靜態程式碼塊,我要先執行,JVM載入類," +
"就會執行我,但是就執行一次,無論我在main方法的前或者後");
}
public static void main(String[] args) {
System.out.println("Hello World!!!");
}
}
結果為:
看這裡,我是靜態程式碼塊,我要先執行,JVM載入類,就會執行我,但是就執行一次,無論我在main方法的前或者後
Hello World!!!
2.++i與i++ 的區別?
答:不同點:在於i++是先進行參與運算,在開始自增,也就是說此時的i等於原來的值;而++i的話,意味著,先進行自增,在進行參與運算。
首先看題,這裡這個題有些問題,沒有規定資料型別,預設為int型
假設x=1,y=2,z=3,則表示式y+=z--/++x的值是多少?
y+=也就意味著y=y+表示式
z--:先參與運算,在自減,此時z--的值為3,
++x:先自增,再參與運算,此時++x的值為2.
由於--和++的優先順序高於/,所以y+=(3/2),注意此時的型別預設是int型,1.5=1,所以結果才為3。
3."=="與equals與hashCode有什麼區別?
答:
- "=="運算子用來比較兩個變數的值首否相等。也就是說,該運算子用於比較變數對應的記憶體中所儲存的數值是否相同,這個時候就表明和記憶體沒有什麼關係,只是和記憶體中儲存的數值有關係。如果說這兩個比較的變數是基本資料型別,那麼可以直接使用運算子來進行比較,但是當涉及到變數是物件的話,此時就包含到了記憶體,例如:string str=new string(),變數str佔用一塊儲存空間,而new string()則儲存了另一個儲存空間,,此時的str儲存的是【new string()裡內容的】地址,也就是說,str是儲存的是一個地址。
public class Test2 {
public static void main(String[] args) {
String str1=new String("Apple");
String str2=new String("Apple");
System.out.println(str1==str2);
System.out.println(str1.equals(str2));
}
}
結果是:
false
true
由此可以看到:str1與str2的結果不是相等的,因為str1與str2儲存的地址不一樣。我們可以看到使用equals方法結果不一樣。
2. equals是object類提供的方法之一。每個Java物件都會繼承自object類,所以每個物件都具有該方法。當比較的變數是基本資料型別,此時equals與"=="結果是一樣的,equals方法的特殊之處就是在於它可以被覆蓋(也就是說equals方法重寫),所以可以通過覆蓋的方法讓他不是比較引用,而是比較資料的內容。重寫equals方法也會導致重寫hashCode()方法。
3.hashCode()方法是從object類中繼承過來的,也是用來判斷兩個物件是否相等。hashCode()方法是返回物件在記憶體中地址轉換成的一個int值,結合equals方法,str1.equals(str2)返回值是true,那麼hashCode()方法返回的int值一定相等,反之,str1.equals(str2)返回值是false,那麼那麼hashCode()方法返回的int值不相等。(自己總結來說,equlas方法是巨集觀的,而hashcode方法更多的是底層的)
4.為什麼重寫equals方法也要同時重寫hashcode方法?
答:首先是會違反hashcode的通用約定。使用hashcode方法提前校驗,可以避免每一次比對都呼叫equals方法,提高效率;保證是同一個物件,如果重寫了equals方法,而沒有重寫hashcode方法,會出現equals相等的物件,hashcode不相等的情況(存在hash衝突),重寫hashcode方法就是為了避免這種情況的出現。
相關文章
- 面試題記錄面試題
- 記錄近期面試題,面試總結面試題
- JS面試考題記錄JS面試
- 面試刷題偶有記錄面試
- Android面試題記錄Android面試題
- c#面試題記錄C#面試題
- 前端筆試題面試題記錄前端筆試面試題
- 記錄一次測開面試題記錄面試題
- 面試演算法題記錄面試演算法
- 記錄一次面試題面試題
- 前端筆試題面試題記錄(下)前端筆試面試題
- 2017面試分享(js面試題記錄)JS面試題
- 面試問題記錄 三 (JavaWeb、JavaEE)面試JavaWeb
- JAVA執行緒面試題書目錄Java執行緒面試題
- 面試記錄面試
- 4.21 阿里電話面試問題記錄阿里面試
- 面試問題記錄 一 (基礎部分)面試
- JAVA開發人員面試題書目錄Java面試題
- Java面試題全集學習筆記Java面試題筆記
- 記錄一些js面試題以及解法JS面試題
- 記錄自己面試遇到的難題及分析面試
- 面試記錄2面試
- Linux第二天的學習記錄Linux
- Java基礎題目記錄-01Java
- 前端筆試題面試題記錄(上)| 掘金技術徵文前端筆試面試題
- 【Java面試題】之記憶體洩漏Java面試題記憶體
- java後端開發ms題記錄Java後端
- java面試題Java面試題
- SQL面試題收錄SQL面試題
- 【Java面試】Java常見IO面試題!Java面試題
- 【Java面試】Java設計模式面試題!Java設計模式面試題
- JAVA面試題 java部分Java面試題
- 面試問題記錄 二 (資料庫、Linux、Redis)面試資料庫LinuxRedis
- Java面試題中高階進階(JVM篇Java記憶體)Java面試題JVM記憶體
- 100道JAVA面試題+JAVA面試題參考答案Java面試題
- Java面試札記Java面試
- 筆記:記錄一次面試筆記面試
- 【Java面試題】Java面試之多執行緒!Java面試題執行緒