-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Description
基本类型
在本节中,我们会描述 Kotlin 中使用的基本类型:数字、字符、布尔值、数组与字符串
--
数字
Kotlin 提供了如下的内置类型来表示数字(与 Java 很相近):
Type| Bit width
----|-----
Double |64
Float |32
Long |64
Int |32
Short| 16
Byte |8
字面常量
数值常量字面值有以下几种:
- 十进制: 123
- Long 类型用大写 L 标记: 123L
- 十六进制: 0x0F
- 二进制: 0b00001011
- 注意: 不支持八进制
Kotlin 同样支持浮点数的常规表示方法:
-
默认 double:123.5、123.5e10
-
Float 用 f 或者 F 标记: 123.5f
数字字面值中的下划线
你可以使用下划线使数字常量更易读:
val oneMillion = 1_000_000
val creditCardNumber = 1234_5678_9012_3456L
val socialSecurityNumber = 999_99_9999L
val hexBytes = 0xFF_EC_DE_5E
val bytes = 0b11010010_01101001_10010100_10010010显示转换
由于不同的表示方式,较小类型并不是较大类型的子类型。 如果它们是的话,就会出现下述问题:
// 假想的代码,实际上并不能编译:
val a: Int? = 1 // 一个装箱的 Int (java.lang.Integer)
val b: Long? = a // 隐式转换产生一个装箱的 Long (java.lang.Long)
print(a == b) // 惊!这将输出“false”鉴于 Long 的 equals() 检测其他部分也是 Long所以同一性还有相等性都会在所有地方悄无声息地失去。
因此较小的类型不能隐式转换为较大的类型。 这意味着在不进行显式转换的情况下我们不能把 Byte 型值赋给一个 Int 变量。
val b: Byte = 1 // OK, 字面值是静态检测的
val i: Int = b // 错误我们可以显式转换来拓宽数字
val i: Int = b.toInt() // OK: 显式拓宽每个数字类型支持如下的转换:
toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char缺乏隐式类型转换并不显著,因为类型会从上下文推断出来,而算术运算会有重载做适当转换,例如:
val l = 1L + 3 // Long + Int => Long运算
对于位运算,没有特殊字符来表示,而只可用中缀方式调用命名函数,例如:
val x = (1 shl 2) and 0x000FF000这是完整的位运算列表(只用于 Int 和 Long):
shl(bits) – 有符号左移 (Java 的 <<)
shr(bits) – 有符号右移 (Java 的 >>)
ushr(bits) – 无符号右移 (Java 的 >>>)
and(bits) – 位与
or(bits) – 位或
xor(bits) – 位异或
inv() – 位非字符
布尔值
数组与字符串
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels