Java中==和equals和hashCode的差別
基本資料類型的
==
比較的值相等.
類的
==
比較的記憶體的位址,即是否是同一個對象,在不覆寫
equals
的情況下,同比較記憶體位址,原實作也為
==
,如
String
等重寫了
equals
方法.
hashCode
也是
Object
類的一個方法。傳回一個離散的
int
型整數。在集合類操作中使用,為了提高查詢速度。
(HashMap,HashSet等比較是否為同一個)
如果兩個對象
equals,Java
運作時環境會認為他們的
hashcode
一定相等。
如果兩個對象不
equals
,他們的
hashcode
有可能相等。
如果兩個對象
hashcode
相等,他們不一定
equals
。
如果兩個對象
hashcode
不相等,他們一定不
equals
。
int與integer的差別
int
基本類型
integer
對象
int
的封裝類
String、StringBuffer、StringBuilder差別
String:
字元串常量 不适用于經常要改變值得情況,每次改變相當于生成一個新的對象
StringBuffer:
字元串變量 (線程安全)
StringBuilder:
字元串變量(線程不安全) 確定單線程下可用,效率略高于StringBuffer
什麼是内部類?内部類的作用
内部類可直接通路外部類的屬性
Java
中内部類主要分為
成員内部類
、
局部内部類
(嵌套在方法和作用域内)、
匿名内部類
(沒構造方法)、
靜态内部類
(static修飾的類,不能使用任何外圍類的非static成員變量和方法, 不依賴外圍類)
程序和線程的差別
程序
是
cpu
資源配置設定的最小機關,
線程
是
cpu
排程的最小機關。
程序之間不能共享資源,而線程共享所在程序的位址空間和其它資源。
一個程序内可擁有多個線程,程序可開啟程序,也可開啟線程。
一個線程隻能屬于一個程序,線程可直接使用同程序的資源,線程依賴于程序而存在。
final,finally,finalize的差別
final:
修飾類、成員變量和成員方法,類不可被繼承,成員變量不可變,成員方法不可重寫
finally:
與
try...catch...
共同使用,確定無論是否出現異常都能被調用到
finalize:
類的方法,垃圾回收之前會調用此方法,子類可以重寫
finalize()
方法實作對資源的回收。
Serializable 和Parcelable 的差別
Serializable
Java
序列化接口 在硬碟上讀寫 讀寫過程中有大量臨時變量的生成,内部執行大量的
i/o
操作,效率很低。
Parcelable
Android
序列化接口 效率高 使用麻煩 在記憶體中讀寫(
AS
有相關插件 一鍵生成所需方法) ,對象不能儲存到磁盤中。
靜态屬性和靜态方法是否可以被繼承?是否可以被重寫?以及原因?
可繼承 不可重寫 而是被隐藏
如果子類裡面定義了靜态方法和屬性,那麼這時候父類的靜态方法或屬性稱之為
"隐藏"
。如果你想要調用父類的靜态方法和屬性,直接通過
父類名.方法
或
變量
名完成。
成員内部類、靜态内部類、局部内部類和匿名内部類的了解,以及項目中的應用
Java
中内部類主要分為
成員内部類
、
局部内部類
(嵌套在方法和作用域内)、
匿名内部類
(沒構造方法)、
靜态内部類
(
static
修飾的類,不能使用任何外圍類的非
static
成員變量和方法, 不依賴外圍類)
使用内部類最吸引人的原因是:
每個内部類都能獨立地繼承一個(接口的)實作,是以無論外圍類是否已經繼承了某個(接口的)實作,對于内部類都沒有影響。
因為
Java
不支援多繼承,支援實作多個接口。但有時候會存在一些使用接口很難解決的問題,這個時候我們可以利用内部類提供的、可以繼承多個具體的或者抽象的類的能力來解決這些程式設計問題。可以這樣說,接口隻是解決了部分問題,而内部類使得多重繼承的解決方案變得更加完整。
哪些情況下的對象會被垃圾回收機制處理掉?
- 所有執行個體都沒有活動線程通路。
- 沒有被其他任何執行個體通路的循環引用執行個體。
-
中有不同的引用類型。判斷執行個體是否符合垃圾收集的條件都依賴于它的引用類型。Java
要判斷怎樣的對象是沒用的對象。這裡有
2
種方法:
- 采用标記計數的方法:
給記憶體中的對象給打上标記,對象被引用一次,計數就加
1
,引用被釋放了,計數就減一,當這個計數為
0
的時候,這個對象就可以被回收了。當然,這也就引發了一個問題:循環引用的對象是無法被識别出來并且被回收的。是以就有了第二種方法:
- 采用根搜尋算法:
從一個根出發,搜尋所有的可達對象,這樣剩下的那些對象就是需要被回收的。
靜态代理和動态代理的差別,什麼場景使用?
靜态代理類:
由程式員建立或由特定工具自動生成源代碼,再對其編譯。在程式運作前,代理類的.class檔案就已經存在了。
動态代理類:
在程式運作時,運用反射機制動态建立而成。
Java中實作多态的機制是什麼?
方法的重寫
Overriding
和重載
Overloading
是
Java
多态性的不同表現
重寫
Overriding
是父類與子類之間多态性的一種表現
重載
Overloading
是一個類中多态性的一種表現.
HashMap和HashTable的差別
HashMap
不是線程安全的,效率高一點、方法不是
Synchronize
的要提供外同步,有
containsvalue
和
containsKey
方法。