Kotlin第二讲——数据类型与Java的对比

内容简介:通过前文的数据类型介绍,我们今天来看一下 Kotlin 与 Java 间的数据类型类型对比。

严格的数据类型验证

java 的世界中,基本数据数据类型不同也是可以赋值操作的( java 处于睁一只眼闭一只眼的情况)

例如:

Kotlin 具有严格的数据类型判断,不同的类型是不允许赋值操作的。

如:

==  和 equals

符合 == 的含义变成了equals

在 java 的世界中 == 的本质都是在对比 2 个数字的值是否相同(引用类型对比地址,地址也是一个 int 类型的数字)。我前面说过 kotlin 已经不存在基本数据类型,所以 == 的含义也发生了变化,全部变成了调用 equals 方法。

如:

这里是不是可以联想到Kotlin的 String 字符串,为何直接可以使用 == 做字符串相同比较呢?

null 与非 null 类型

kotlin 中定义的变量类型,不光需要指定数据类型,还需要指定是否可为 null 的类型。

定义可 null 和不可 null 类型:

这里补充一点,kotlin 调用java方法返回的对象,会是新的类型 ?! 。这种类的在kotlin中属于不可为 null 的类型。但是 java 返回的是一个 null 的话,kotlin直接调用,就会报 空指针异常。

聪明的空类型判断

在java的编程世界中,最常见的就是 NullPointerException 。 kottlin 的设计师为我们想到了这个头疼的问题,在编码的过程中尽量规避这个异常(当然不代表100%规避)。

例如:

运用方式 解释
val str: String? = null 定义变量的时候,代表可null类型
str?.length 属性方法调用时候,如果对象为null,不调用方法,直接返回null
?: 若前面的表达式,结果为null直接调用,后面的表达式

当时 ?: 和 str?.length 理解的不是很清晰,本质上这2个语法是不同的功能。我就是犯了这个错误。。

例如:

经常写适配器,长度的方法:

智能类型转换

在java 中判断一个对象类型,使用关键词 instanceof 。  在Kotlin 中使用 is 关键词,你以为就是缩短了关键词这么简单吗? kotlin 隐藏着一个类型转换的过程。

例如写了个 if 语句,逻辑判断我是不是程序员? 如果是,if 内的逻辑会自动将我转换成程序员,并持有程序员的特性。

例如:

下方内容存在部分,kotlin 类的知识,后续会讲。

你以为这样就结束了? 就这么点小智能? 当然不是,还记得 kotlin 中存在 null 类型和不可为 null 吗? 可null 类型的变量,是不可以赋值给不可为 null 的变量的哦(印证了 kotlin 中类型的赋值的严格校验)。

kotlin 中可 null & 不可 null 的智能转换:

val 与 var 的区别

kotlin 中定义变量需要使用 val 与 var 关键词

  • val修饰,定义不可变变量。类似java中final修饰(并不是完全相同)

  • var修饰,定义可变变量。

val 定义变量是不可以修改的,并且要在定义的时候初始化或者委托给另外方法(委托的概念后续会讲)。

kotlin 中 val 的定义变量都有1个隐藏的方法 get 方法,当获取本变量的值的时候,就会调用。

var 定义的可变变量,都有2个隐藏的方法 get & set方法,当获取本变量的值调用 get,设置变量的值时调用 set 。

例如:

kotlin 中的 val 和 java 中的 final 修饰的变量是存在不同的哦。

java 中 final 修饰的变量,在编译期就知道了该变量的值是多少。所以在引用的此变量时候就会直接使用此值(编译器替换)。

kotlin的 val 变量是不会替换的。如果想要替换使用 const 修饰

is 关键字

java中我们经常使用 instanceof 判断类型。kotlin中不存在词关键词了,与之替换的是 is 关键词

as 和安全的类型转换

java中有强制类型转换(直接前面加 ())。 kotlin中的强转变成了使用关键词 as 。

kotlin中独有安全类型转换

延迟加载

前面说过,kotlin 的变量类型,新增了可 null 和不可 null。 但是有时候特殊情况,我们知道这个变量是不可为 null 的,但是初始化这个变量,还需要其他运行时候产生的条件,可以通过 lateinit 关键词。

总结

在学习 kotlin 数据类型篇章过程中,发现相比较java来说,kotlin 去其糟粕取其精华。

在数据类型这块,kotlin 对比 java 做的更加的好。 相比来说 java 的强类型语言,kotlin 给我的感觉越来越像javaScript语言靠近。 智能类型推倒,智能类型转换,都是相当不错的设计方案。

koltin 在经常出现的 null 指针设计理念还是很惊艳的,将这种异常大部分暴露在编译期。

kotlin 没有 java 的基本数据类型的概念了。

kotlin 都将 java 的基本类型,进行了包装(类似 java 的 Integer 等)。

--END--

识别二维码,关注我们

我来评几句
登录后评论

已发表评论数()

相关站点

热门文章