首先牢记一个知识点:Kotlin中一切皆是对象。
Kotlin中不再像Java那样拥有所谓的primitive主数据类型(基本数据类型),取而代之的是封装好的类型。
它们是:数字、字符、布尔值、数组和字符串(下图提供了Java的基本数据类型作对比)。
1 Kotlin中表示数字
type(类型) | description(描述) | bit width(占用空间) |
---|---|---|
Double | 双精度浮点型 | 64 |
Float | 浮点型 | 32 |
Long | 长整型 | 64 |
Int | 整型 | 32 |
Short | 短整型 | 16 |
Byte | 字节 | 8 |
字符在Kotlin中不是数字。
Java基本数据类型参考
1.1 数字常量表示
- 十进制:1992
- Long类型:1992L
- 十六进制:0x0F
- 二进制:0b00001011
- 浮点数double(默认):123.5
- Float:123.5f
(Kotlin不支持八进制)
//使用下划线易读
val oneMillion = 1_000_000
1.2 表示方式
Kotlin中,三个等号"===“表示比较对象地址,两个”=="表示比较两个值大小。
val a: Int = 10
println(a===a)//输出为true,值相等,地址相等
//经过了数字装箱
val boxedA: Int? = a
val anotherBoxedA:Int? = a
println(boxedA===anotherBoxedA)//输出为false,地址不同
println(boxedA == anotherBoxedA)//输出为true,保留了值相等
1.3 显示转换
Kotlin中较小的类型不能隐式转换为较大的类型,因为较小类型不是较大类型的子类。(对比Java的隐式转换)Kotlin提供了类型转换函数来拓宽数字:
val b: Byte = 1
val a: Int = b.toInt()//显示拓宽
print(a)
- toByte()
- toShort()
- toInt()
- toLong()
- toFloat()
- toDouble()
- toChar()
1.4 运算
位运算支持
- shl(bits):有符号左移
- shr(bits):有符号右移
- ushr(bits):无符号右移
- and(bits):位与
- or(bits):位或
- xor(bits):位异或
- inv(位非)
字符
字符用char表示,不能直接当数字。字符字面值用单引号括起来 ‘1’。特殊字符可以用反斜杠转义。支持转义序列:\t、\b、\n、\r、'、"、\、$.
布尔
布尔用Boolean类表示,它有两个值:true和false.
内置的布尔运算有:
- || 短路逻辑或
- && 短路逻辑与
- ! 逻辑非
数组
数组在Kotlin中使用Array类来表示,它定义了get与set函数(按照运算符重载约定转变为[])以及size属性。创建数组的方法:
- arrayOf()或arrayOfNulls()
- 构造函数Array
//1.数组-arrayOf
val a = arrayOf(1,2,3)
println(a[0])//[]运算符
//2.数组-构造函数Array
val asc = Array(5){i -> (i * i).toString()}
asc.forEach {
println("array result = $it")
}
与Java不同的是,Kotlin中数组是不型变的。
Kotlin也有表示原生类型数组:ByteArray、ShortArray、IntArray等。
字符串
字符串用String类型表示,字符串是不可变的。
- 使用索引运算符(s[i])访问字符串中的字符
- 可以用"+"操作符连接字符串
- 可以使用for循环迭代字符串
- 字符串字面值之转义字符串
- 字符串字面值之原始字符串
- trimMargin()函数可以用来去除前导空格
- 字符串模板,模板表达式以符号$开头
val name = "Android"
println("name[2] = " + name[2])//使用索引运算符
//迭代字符串
for (c in name) {
println("c = $c")
}
//+操作符
val newName = name + " is funny!"
println("result = $newName")
//字符串字面值
val s = "Hello World!\n"
val text = """
aoe,
dddd,
fff
""".trimMargin()
println("text = $text")
输出结果: