Skip to content

基础语法

基本数据类型

数值型(整数、浮点数)

类型位数 bit
Byte / UByte8
Short / UShort16
Int / UInt32
Long / ULong64
Float32
Double64

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,只有两个取值 truefalse

如果布尔类型可为空,其也是包装类

布尔类型支持 &&||! 三种运算符

数组

数组类型的关键字是 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 语句类似于 switchwhen 将它的参数与所有的分支条件做顺序比较

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")
}

最近更新:

All articles are under CC BY 4.0 license