基本类型
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来约束实现类似的功能 |