手记|Kotlin 基础类型回顾

435 阅读5分钟

不知道对与错,慢慢 change...

这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战

不瞒各位大佬,我想混个杯子,杯子被猫猫干碎了...

还记得 18 年的时候,第一次使用 Kotlin,便是借助于 Android Studio 一键转换神器将编写好的 Java 类转为 Kotlin,然后进行逐步学习,进而 “深入掌握” Kotlin 这门语言。事实证明,没有花费一定时间和功夫,对于其本身掌握程度依旧是停留表面,甚至连 Kotlin 入门级别都达不到。

正好趁着机会,认真学习下。

不得不说让人汗颜的事情,18 年参加活动得了 Kotlin 的书籍,扉页阳阳还特意写了鼓励的话,可惜,吃灰 ing...

有些事情真的不想去再次经历了,为下一次,努力吧~

感谢这个时代,站在巨人的肩膀学习~ 感谢各位大佬,期间参阅资料文末均会附上地址链接~

奉上脑图:

image.png

Kotlin 优势

这个问题在之前面试中,被问到太多次了,多的都让人不知道说些什么了。

直到现在为止,个人对于 Kotlin 的优势理解依然不变,欢迎大佬拍砖:

  • Google 官方认定开发第一语言,完全兼容 Java。 官方对于 Kotlin 本身的大力投入,进一步推进 Kotlin 更为迅猛的发展。比如 Android Studio 提供的一键式 Java 转 Kotlin 插件,一定程度上降低了 Kotlin 的学习成本。
  • 语言简洁性进一步带来代码量缩减。 在实现同等业务逻辑上,Kotlin 代码比 Java 代码更少。
  • null 安全。 Java 逃脱不了的命运(java.lang.NullPointerException),虽然不能说是在 Kotlin 百分之百避免,有时候还是会因为不可抗因素引发相似问题,但是相对 Java 而言,Kotlin 已经很不错了。
  • 结构化并发。 通过引入协程简化异步编程。

总结来说几个关键字:兼容 Java、简洁、null 安全、更方便的异步。

回顾 Java 类型

这也算是曾经的面试中常常出现的问题吧。我们一起回顾一下。

1、基本数据类型

  • 八大类型:
    • 数字类型:
      • 整数类型:byte、short、int、long
      • 浮点数类型:float、double
    • 字符类型:char
    • 布尔类型:boolean

2、引用数据类型

常用的 String、数组,均为引用数据类型。

3、两者间区别

基本数据类型引用数据类型
栈中分配堆中分配
变量指向具体数值变量指向对应内存地址
声明时便会分配内存空间声明时只存储内存地址
赋值属于新的拷贝赋值属于传递引用
== != 比较值== != 比较堆内存地址
销毁快类对象需要 JVM 销毁

Kotlin 类型与声明

Kotlin 声明变量如下所示:

  • var|val 变量名 [:类型] [=初始值]

当然,也可以如下所示:

  • var|val 变量名 [=初始值]

Kotlin 的智能会为我们智能推导。其中 var 属于可变类型,val 属于不可变类型。

1、Java/Kotlin 类型表

类型JavaKotlin
整数型int/IntegerInt
long/LongLong
byte/ByteByte
short/ShortShort
浮点型floatFloat
doubleDouble
字符型charChar
字符串型StringString
Boolean 类型booleanBoolean
  • 其中 Byte、Short、Int、Long 都继承自 Number 类型,所以说 Kotlin 的整数类型均为引用类型,而非基本类型。

2、举例说明

我们接下来再来举几个例子:

var num: Int = 99
var num1 = 100

var str: String = ""
var str1 = ""

var boo: Boolean = true
var bool = true

var dou: Double = 1.0
var dou1 = 1.1

var flo: Float = 1f
var flg1 = 1f

声明同一种类型,不同的方式,而个人开发过程中,更为常使用的方式为第二种。

如果有 Java 基础的童鞋,建议配合插件一块学习 Kotlin。

Kotlin 转换 Java 插件使用步骤:

  • Tools -> Kotlin -> Show Kotlin bytecode

下面进一步演示一下:

Kapture 2021-08-26 at 23.05.40.gif

类型转换

  • toByte()
  • toShort()
  • toInt()
  • toLong()
  • toFloat()
  • toDouble()
  • toChar()

另外,Kotlin 要求不同整型的变量或值之间必须进行显式转换。

null 安全

null 安全算的上是 Kotlin 对于 Java 重大改进之一,其目的,通过更完善的规则去尽可能避免 Java 逃脱不掉的 NullPointException。

1、toXxxOrNull

var str2 = "HLQ"
var str3 = "123"
var count:Int? = str2.toIntOrNull()
var count1:Int? = str3.toIntOrNull()
println("count $count count1 $count1")

有时候业务逻辑难免会出现以上情况,String 转换 Int,而有时 str 真的为 String 时,则会发生转换异常,而 Kotlin 这种 toIntOrNull 的方式则正好进一步完善了逻辑验证,如果转换失败,则当前 value = null,从而进一步是我们的程序更健壮~

2、? 声明

如下图所示:

image.png

当我们在声明某个变量时,同时赋予其 ?,那么在对其使用前,必须进行判空,否则 IDE 直接提示如上异常信息。

判空除了常规的 if else,也包含 Kotlin 提供的另外一些骚操作,这个我们这后面再聊这事儿。

有的小伙伴说了,我就不想判空怎么办?你再骚的操作,我就不用,有啥招?

好办,强制调用 呗。

val userName:String?="HLQ_Struggle"
userName!!.length

只需要在操作变量前对其进行 !! 即可,不过这个操作有风险,还是尽可能的少用吧。

别名使用

使用语法:

  • typealias 类型别名 = 已有类型

别名的出现,是为了进一步缩短较长的引用调用,如下所示,内部类:

class A{
    inner class Inner
}

class B{
    inner  class  Inner
}

// 类型别名
typealias AInner = A.Inner
typealias BInner = B.Inner

THK

Thank you Yangyang for the book~