android kotlin基础(二)-基本类型

来源:互联网 发布:数据挖掘的技术基础 编辑:程序博客网 时间:2024/05/22 17:35

数字
Kotlin 处理数字在某种程度上接近 Java,但是并不完全相同。例如,对于数字没有隐式拓宽转换(如 Java 中 int 可以隐式转换为long——译者注),另外有些情况的字面值略有不同。

Type Bit width Double 64 Float 32 Long 64 Int 32 Short 16 Byte 8

数字字面值中的下划线(自 1.1 起)
你可以使用下划线使数字常量更易读:

val oneMillion = 1_000_000val creditCardNumber = 1234_5678_9012_3456Lval socialSecurityNumber = 999_99_9999Lval hexBytes = 0xFF_EC_DE_5Eval bytes = 0b11010010_01101001_10010100_10010010

显式转换
较小的类型不能隐式转换为较大的类型。 这意味着在不进行显式转换的情况下我们不能把 Byte 型值赋给一个 Int

val b: Byte = 1 // OK, 字面值是静态检测的val i: Int = b // 错误

我们可以显式转换来拓宽数字

val i: Int = b.toInt() // OK: 显式拓宽
每个数字类型支持如下的转换:

toByte(): BytetoShort(): ShorttoInt(): InttoLong(): LongtoFloat(): FloattoDouble(): DoubletoChar(): Char

数组
数组在 Kotlin 中使用 Array 类来表示,它定义了 get 和 set 函数(按照运算符重载约定这会转变为 [])和 size 属性,以及一些其他有用的成员函数:

class Array<T> private constructor() {    val size: Int    operator fun get(index: Int): T    operator fun set(index: Int, value: T): Unit    operator fun iterator(): Iterator<T>    // ……}

我们可以使用库函数 arrayOf() 来创建一个数组并传递元素值给它,这样 arrayOf(1, 2, 3) 创建了 array [1, 2, 3]。 或者,库函数 arrayOfNulls() 可以用于创建一个指定大小、元素都为空的数组。

另一个选项是用接受数组大小和一个函数参数的工厂函数,用作参数的函数能够返回 给定索引的每个元素初始值:

// 创建一个 Array 初始化为 [“0”, “1”, “4”, “9”, “16”]
val asc = Array(5, { i -> (i * i).toString() })

如上所述,[] 运算符代表调用成员函数 get() 和 set()。

注意: 与 Java 不同的是,Kotlin 中数组是不型变的(invariant)。这意味着 Kotlin 不让我们把 Array 赋值给 Array,以防止可能的运行时失败(但是你可以使用 Array, 参见类型投影)。

Kotlin 也有无装箱开销的专门的类来表示原生类型数组: ByteArray、 ShortArray、IntArray 等等。这些类和 Array 并没有继承关系,但是 它们有同样的方法属性集。它们也都有相应的工厂方法:

val x: IntArray = intArrayOf(1, 2, 3)
x[0] = x[1] + x[2]

创建数组示例:

var intArray: IntArray = intArrayOf(11, 21, 31)var str: Array<String> = Array(5, { index -> index.toString() })

字符串
原生字符串 使用三个引号(”“”)分界符括起来,内部没有转义并且可以包含换行和任何其他字符,你可以通过 trimMargin() 函数去除前导空格:

val text = """    |Tell me and I forget.    |Teach me and I remember.    |Involve me and I learn.    |(Benjamin Franklin)    """.trimMargin()

默认 | 用作边界前缀,但你可以选择其他字符并作为参数传入,比如 trimMargin(“>”)。
字符串模板

字符串可以包含模板表达式 ,即一些小段代码,会求值并把结果合并到字符串中。 模板表达式以美元符($)开头,由一个简单的名字构成:

val i = 10
val s = “i = $i” // 求值结果为 “i = 10”

或者用花括号扩起来的任意表达式:

val s = “abc”
val str = “s.lengthis{s.length}” // 求值结果为 “abc.length is 3”

原生字符串和转义字符串内部都支持模板。 如果你需要在原生字符串中表示字面值 $ 字符(它不支持反斜杠转义),你可以用下列语法:

val price = “””
{'’}9.99
“”“