在 Kotlin 中,有着几种基本类型:数字、字符、布尔值、数组与字符串。
- 数字:Kotlin 对于数字的处理接近 Java,但又有不同。如:数字没有隐式拓宽转换。Kotlin 提供了如下的内置类型来表示数字:
类型 | 字节 | 位 |
Double | 8 | 64 |
Float | 4 | 32 |
Long | 8 | 64 |
Int | 4 | 32 |
Short | 2 | 16 |
Byte | 1 | 8 |
在 Java 平台数字是物理存储为 JVM 的原生类型,除非引用可以为空,或者是泛型。如果是泛型会把数字装箱,则不必保留同一性。
fun main(args: Array<String>) {
val a:Int = 1000
println(a === a)
val A1:Int? = a
val A2:Int? = a
// === 是比较地址,相当于 Java 中的 ==
// == 是比较值,相当于 Java 中的 equals()
println(A1===A2)
println(A1==A2)
}
结果:
Kotlin 没有隐式转换,较小的数据类型不能默认转换为较大数据类型:
fun main(args: Array<String>) {
val c:Int? = 1
//因为 d 可能为空,所以要使用 !!.toLong()将 c 转换为 Long 型
// !!. 相当于会抛出空指针异常
var d:Long? = c!!.toLong()
// 但是一般我们用 if 判断
var e:Long?
if (d != null){
d=c.toLong();
}
/*
或者使用表达式,因为这里都是用的常量,不可能为空,所以会有警告
但是如果这里的 c 是一个函数,返回值可能为空时就可以这么写
?. 不为空时获取值,?: 表示为空时获取 2
*/
val f:Long?= c?.toLong() ?:2
println(d)
}
位运算符:
有符号左移 | shl(bits) |
有符号右移 | shr(bits) |
无符号右移 | ushr(bits) |
位与 | and(bits) |
位或 | or(bits) |
位异或 | xor(bits) |
位非 | inv(bits) |
- 字符:使用 Char 表示,不能直接当做数字
不过我们可以显示将 Char 转换为 Int 型:
fun main(args: Array<String>) {
val c:Char = 'a'
val a =c.toInt()
println(a)
}
结果:
可以看到,显示转换过后,'a’,就是在 ASCII 码中的 97
- 布尔值:使用 Boolean 表示,有 true 和 false 两个值,若需要可空引用布尔会被装箱。布尔有三种运算:
短路逻辑或 | || |
短路逻辑与 | && |
逻辑非 | ! |
- 数组:在 Kotlin 中,使用 Array 类来表示,使用 get() 和 set() 来获取和添加元素:
fun main(args: Array<String>) {
// 首先我们定义一个可能为空的,大小为 5 的数组
var list: Array<Int?> = arrayOfNulls<Int>(5)
// 有两种方式来添加数组
list[0] = 0
// set() 方法第一个参数是下标值,第二个是要添加的值
list.set(1,1)
println(list[0])
// 获取也可以使用 get() 方法,传入下标值
println(list.get(1))
// 使用别的方式来创建一个数组
val x:IntArray = intArrayOf(1,2,3)
for (list in x){
print(list)
}
}
结果:
这里我们创建的都是 Int 型的数组,我们还可以使用相同的方式来创建别的类型的数组
- 字符串:用 String 表示,字符串是不可变的,字符可以使用下标索引,也可以使用 for 循环:
fun main(args: Array<String>) {
val str = "abcde"
println(str[3])
for (char in str){
print(char)
}
}
结果:
只要第一个元素为字符串,就可以使用 + 进行连接字符串操作:
fun main(args: Array<String>) {
val str = "abcde"
val words = str + 1
print(words)
}
结果:
如果我们连接字符时,第一个不是字符串就会报错:
None of the following functions can be called with the arguments supplied(在提供的参数中不能调用以下函数)
一些其它的字符串使用:
fun main(args: Array<String>) {
// 转义字符
val text1 = "text1\n"
// 使用 """ """ 的字符串中间不包含任何转义字符
val text2 = """text2\ntext2\n"""
// 字符串模板,使用 $+变量名 来进行合并
val a = 10
val text3 = "abc$a"
// 或者使用 ${} 来合并,会先运行 {} 中的代码
var b = 10
val text4 = "abc${++b}"
println(text1)
println(text2)
println(text3)
println(text4)
println(b)
}
结果: