Kotlin学习笔记(一)—— Kotlin基础
数据类型
基本类型和Java基本保持一致,只是Kotlin中是大写首字母
Char
Byte
Short
Int
Long
Float
Double
Boolean
Kotlin不支持自动扩展数字范围,Java中int类型可自动扩展成long,但是Kotlin中必须要显式的指定类型。
val intValue = 10
val longValue = intValue.toLong()
其他类似的还有toDouble toShort toByte等方法
上面第一行代码中没有显示的指定数据类型,Kotlin可以根据指定的值推断出类型,由此可知上面的intValue的类型是Int。
元组
元组只有二元(Pair)和三元(Triple),因此也只能存放2个值和3个值
val pair = Pair("one", "two")
print(pair.first + " - " + pair.second)
val triple = Triple("one", "two", "third")
print(triple.first + " - " + triple.second + " - " + triple.third)
可空类型
Java中的最常见的一个异常就是NullPointerException,Kotlin的可空类型完美的避免了每次繁琐的判空处理。可空类型表示它的值可以声明为null,用类型后面加一个?表示,如:
val string: String? = null // ①
val string2: String = null // ②
上面①的声明是正确的,但是②的声明是错误的,IDE会提示 Null can not be a value of a non-null type String
,说明没有带?的变量是不能声明为null的。
声明3个变量分别是 s1,s2,s3,将3个变量转换成大写
val s1: String = "Kotlin"
val s2: String? = null
val s3: String
println(s1.toUpperCase())
println(s2?.toUpperCase())
println(s3.toUpperCase()) // IDE报错Variable 's3' must be initialized
KOTLIN
null
声明s1并赋值为小写字符串kotlin,声明s2但是初始化为null,声明s3不初始化。
s1可将 kotlin 转成 KOTLIN;s2初始化为null,直接输出了null,而没有像Java那样报NPE异常;s3声明不报错,但是s3.toUpperCase()的时候IDE编译不通过。这说明:
- 声明可以不立马初始化
- String?是空类型安全的,即使是初始化为null,依旧不报错,而是返回null
- 对于未初始化的变量不能使用
相等操作符
== 和 ===
判断引用是否相等用 ===
判断值是否相等用 ==
val s1 = "Kotlin"
val s2 = "Kotlin"
println(s1 == s2)
println(s1 === s2)
>> true
>> true
因为s1和s2的字符串在常量池中指向的是同一个引用,所以引用和值都返回true
val f1 = File("sdcard/")
val f2 = File("sdcard/")
println(f1 == f2)
println(f1 === f2)
>> true
>> false
f1和f2虽然是相同的路径,但是是不同的对象,所以指向了不同的引用,因此 === 返回false,路径值相同,因此 == 返回true。
区间
区间是一个有开始值和结束值的范围。创建一个区间用 .. 操作符
val range = 1..100
range的范围等同于 1 <= range <= 100
遍历区间
for (num in range) {
println(num)
}
>> 1
>> 2
...
>> 100
区间反转
val reversedRange = range.reversed()
for (num in reversedRange) {
println(num)
}
>> 100
>> 99
...
>> 1
步长
默认的步长是1,也可以设置步长,用step(Int)
val range = 1..100
for (num in range.step(3)) {
println(num)
}
>> 1
>> 4
...
>> 100