基本類型
Kotlin | Java | 差異理解 | |
---|---|---|---|
基本類型 | 萬物皆對象,基本類型也是對象 | 基本類型不是對象 | 融合了int和Integer,作統一管理 |
數字下劃線 | 增加數字下劃線,更易讀 | 不支持 | 增強數字的可閱讀性 |
數值賦值 | 會產生新對象 | 基礎類型不會產生對象 | 增加了=== 值比較 |
數值轉換 | 必須要顯式轉換 | 理解爲Integer的話,其實也是要顯式轉換 | |
位運算 | 一堆符號 | 用關鍵字 | |
字符對比 | 不可當數字 | 可以自動轉數字 | |
字符串 | 有"""原始字符串 | 無 | 新增了"""功能 |
末尾有無分號 | 無分號,系統自動添加 | 有分號 |
條件判斷
Kotlin | Java | 差異理解 | |
---|---|---|---|
區間判斷 | 可以進行x…y的區間判斷 | 需要用< >進行範圍判斷 | Kotlin簡化了常用的判斷 |
when | 可跟任意判斷邏輯進行組合 | java中是switch是對單一類型進行判斷 | Kotlin簡化了條件判斷,並支持了多種條件 |
循環判斷
Kotlin | Java | 差異理解 | |
---|---|---|---|
for循環 | 簡化for循環索引和取值 | Kotlin簡化循環中獲取index、value | |
標籤 | 增加了標籤功能 | Kotlin局部加強了循環的結束跳轉 |
包、類和對象
Kotlin | Java | 差異理解 | |
---|---|---|---|
包導入 | 添加as關鍵字,支持別名 | 不支持 | kotlin解決了包名衝突 |
構造函數 | 添加了主\次構造函數概念 | 引入了主\次構造函數後,簡化了結構體的編碼,如java單例模式中的private結構體 | |
override | 相比java,對繼承中,增強 改變的部分 的標註 | kotlin在安全方面的考量更多 |
屬性
Kotlin | Java | 差異理解 | |
---|---|---|---|
field | 引入了field字段 | kotlin解決了包名衝突 | |
屬性的getter&setter | 物理上聚攏跟屬性相關的操作 | 需要通過function進行操作 | kotlin更精簡 |
變量的聲明 | 簡化val 和var兩種 | java是強類型語言 | |
變量延遲初始化 | 引入lateinit處理 |
接口
Kotlin | Java | 差異理解 | |
---|---|---|---|
接口實現機制 | 可指定super的基類 | 只有一個基類 |
擴展
Kotlin | Java | 差異理解 | |
---|---|---|---|
動態擴展 | 動態擴展屬性、函數,靜態解析 | 只能通過繼承解決 |
數據類&密封類
Kotlin | Java | 差異理解 | |
---|---|---|---|
數據類 | data快捷自動創建 | 通過插件解決 | Kotlin提供了setter\getter\equals\toString等快捷生成的函數,更爲便捷 |
密封類 | enum的擴展類。操作類型有限定,但是可以自動組合 | java無法二次組合 |
枚舉類
Kotlin | Java | 差異理解 | |
---|---|---|---|
枚舉類 | 代碼量更少 | java代碼多一些 | 功能都可以實現,只是代碼量區別 |
對象表達式和對象聲明
Kotlin | Java | 差異理解 | |
---|---|---|---|
單例模式 | object聲明後天然單例,通過類名調用 | 4種單例,各有區別,通過實例獲取 | kotlin代碼少多了,還避免的 內存模型的考慮 |
object和any | 新增了any,兩者是編譯期區別,運行期一樣 | ||
private和非private函數 | 返回值會不一樣 | 無差別 | |
增加伴生對象 | 增加了伴生對象 | 伴生對象補償了object類的初始化需求 |
別名
Kotlin | Java | 差異理解 | |
---|---|---|---|
增加typealias | 使用typealias後名稱更美麗 | kotlin考慮了視覺美觀 |
委託
Kotlin | Java | 差異理解 | |
---|---|---|---|
by關鍵字 | 委託的快捷實現 | 也可以實現 | |
lazy懶加載 | 新增了lazy關鍵字,懶加載更方便 | 可實現,但需要編寫實例化的語句 | |
觀察者模式 | 增加Delegates.observable,變量變化已追蹤 | 需要統一的設置入口,編碼要規範 |
泛型
Kotlin | Java | 差異理解 | |
---|---|---|---|
out、in關鍵字 | 支持型變 | 不支持,需要通過T來約束實現類似的功能 |