基础语法
基本数据类型
数值型(整数、浮点数)
类型 | 位数 bit |
---|---|
Byte / UByte | 8 |
Short / UShort | 16 |
Int / UInt | 32 |
Long / ULong | 64 |
Float | 32 |
Double | 64 |
Kotlin 不允许隐式转换类型,例如 printDouble()
的参数为 Double
类型,调用该方法时,参数必须是 Double
类型
kt
fun printDouble(d: Double) = println(d)
每种类型都提供了如下的显示转换方法
kt
toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char
定义变量时可以显式得指定变量类型
kt
val i = 1 // Int
val d = 1.1 // Double
val f = 1.1f // Float
val l = 1L // Long
val h = 0x0f // 十六进制
val b = 0b0001 // 二进制
val u = 1u // UInt
val ul = 1UL // ULong
这些数值类型可为空时(如 Int?
),数值是包装类,其他情况为基本数据类型,包装类的值相等,但内存地址不同
kt
val a = 100
println(a === a) // true
val b: Int? = a
val c: Int? = a
println(b === c) // false
println(b == c) // true
字符型
字符类型的关键字是 Char
,用单引号表示,如 'a'
字符类型不能直接转换为数值类型,需要进行显式转换
如果字符类型可为空,其是包装类,而不是基本数据类型
布尔型
布尔类型的关键字是 Boolean
,只有两个取值 true
和 false
如果布尔类型可为空,其也是包装类
布尔类型支持 &&
、||
、!
三种运算符
数组
数组类型的关键字是 Array
,可以用 arrayOf()
创建一个数组
数组有 get()
和 set()
方法,可以用 []
替代这两个方法
kt
val arr = arrayOf(1, 2, 3)
arr[0] = 0
println(arr[0]) // 0
println(arr.size) // 3
Kotlin 提供 byteArrayOf()
、shortArrayOf()
和 intArrayOf()
等函数用于创建不同类型的数组
字符串
String
表示字符串,字符串是不可变对象,可以用 [i]
遍历每一个字符,用 +
拼接字符串
kt
val str = "abc"
for (c in str) {
println(c)
}
println(str + "def") // abcdef
字符串可以由 """
分割,通过 trimIndent()
、trimMargin()
等方法去除缩进或空格
字符串支持模板,在字符串中使用 $
嵌入
kt
val str = "abc"
println("$str.length is ${str.length}") // abc.length is 3
val price = "${'$'}9.99" // 单独使用 $ 字符
流程控制
if
的分支可以是代码块,最后的表达式作为该块的值
kt
var maxVal = 1
if (1 > 2) {
maxVal = 1
} else {
maxVal = 2
}
maxVal = if (1 > 2) 1 else 2
when
语句类似于 switch
,when
将它的参数与所有的分支条件做顺序比较
when
既可以被当作表达式使用,也可以被当作语句使用
kt
when (val x: Any = 0) {
is Int -> println("$x is Int")
else -> println("other type")
}
for
语句可以对任何提供迭代器(iterator)的对象进行遍历
kt
// 顺序遍历 1 <= i <= 3
for (i in 1..3) {
println(i)
}
// 逆序遍历,指定步长
for (i in 6 downTo 0 step 2) {
println(i)
}
// 遍历数组
val arr = arrayOf(1, 2, 3)
for (i in arr.indices) {
println(arr[i])
}
// 遍历数组,解析下标和元素
for ((i, v) in arr.withIndex()) {
println("the element at $i is $v")
}