数字类型
Kotlin 中去掉了原始类型,只有包装类型,编译器在编译代码的时候,会自动优化性能,把对应的包装类型拆箱为原始类型。
对于 Kotlin 中的数字类型而言,不可空类型与Java中原始的数字类型对应。
Kotlin | Java |
---|---|
Int | int |
Long | long |
Float | float |
Double | double |
Kotlin 中对应的可空数字类型就相当于 Java 中的装箱数字类型。
Kotlin | Java |
---|---|
Int? | integer |
Long? | Long |
Float? | Float |
Double? | Double |
在 Java 中,从基本数字类型到引用数字类型的转换过程就是典型的装箱操作,例如 int 转换为 Integer。倒过来,从 Integer 转为 int 就是拆箱操作。同理,在 Kotlin 中非空数字类型 Int 到可空数字类型 Int? 需要进行装箱操作。同时,非空的 Int 类型会被编译器自动拆箱成基本数据类型 int,存储的时候也会存到栈空间。例如下面的代码,当为 Int 类型的时候,a===b 返回的是 true;而当为 Int?的时候,a===b 返回的 false。
fun main() {
val a: Int = 1000
val b: Int = 1000
println(a == b)
println(a === b)
}
// true
// true
复制代码
上面返回的都是 true,因为 a、b 它们都是以原始类型存储的,类似于 Java 中的基本数据类型。
fun main() {
val a: Int? = 1000
val b: Int? = 1000
println(a == b)
println(a === b)
}
// true
// false
复制代码
可空类型 Int? 等价于 Java 中的 Integer 包装类型,这里 a、b 引用不相等。
数组类型
Java 中的数组也是一个较为特殊的类型。这个类型是 T[],这个方括号让我们觉得不太“优雅”。Kotlin 中摒弃了这个数组类型声明的语法。Kotlin 简单直接地使用 Array 类型代表数组类型。完整的定义如下:
public class Array<T> {
public inline constructor(size: Int, init: (Int) -> T)
public operator fun get(index: Int): T
public operator fun set(index: Int, value: T): Unit
public val size: Int
public operator fun iterator(): Iterator<T>
}
复制代码
其中构造函数我们可以这么用:
fun main() {
val square = Array(5) { i -> i * i }
square.forEach {
println(it)
}
}
// 0
// 1
// 4
// 9
//
16
复制代码
在编程过程中常用的是 boolean[]、char[]、byte[]、short[]、int[]、long[]、float[]、double[];Kotlin 直接使用了 8 个新类型来对应这样的编程场景:
BooleanArray
ByteArray
CharArray
DoubleArray
FloatArray
IntArray
LongArray
ShorArray
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END