数值类型
Q:Java的基本数据类型
Kotlin 处理数值的方法和 java 很相似,但不是完全一样。比如,不存在隐式转换数值的精度,并且在字面上有一些小小的不同
Kotlin 提供了如下内建数值类型
类型 | 位宽 |
---|---|
Double | 64 |
Float | 32 |
Long | 64 |
Int | 32 |
Short | 16 |
Byte | 8 |
val b:Byte = 1
val s:Short = 1
数据类型转化
由于不同的表示方式,较小类型并不是较大类型的子类型,较小的类型不能隐式转换为较大的类型。 这意味着在不进行显式转换的情况下我们不能把 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 sum = 1f + 1 // Long + Int = Long
位操作符
shl(bits) – 左移位 (Java’s <<)
shr(bits) – 右移位 (Java’s >>)
ushr(bits) – 无符号右移位 (Java’s >>>)
and(bits) – 与
or(bits) – 或
xor(bits) – 异或
inv() – 反向
字符类型
字符类型用 Char 表示。不能直接当做数值来使用
和 Java 不一样,Kotlin 中的 Char 不能直接和数字操作,Char 必需是单引号 ' 包含起来的。比如普通字符 '0','a'。
fun check(c: Char) {
if (c == 1) { // 错误:类型不兼容
// ……
}
}
字符字面值用单引号括起来: '1'。 特殊字符可以用反斜杠转义。 支持这几个转义序列:\t、 \b、\n、\r、'、"、\ 和 $。 编码其他字符要用 Unicode 转义序列语法:'\uFF00'。
布尔类型
布尔用 Boolean 类型表示,它有两个值:true 和 false。
若需要可空引用布尔会被装箱。
内置的布尔运算有:
|| – 短路逻辑或
&& – 短路逻辑与
! - 逻辑非
数组类型
数组在 Kotlin 中由 Array 类表示,有 get 和 set (通过运算符重载为[] )方法,和 size 属性,以及一些常用的函数:
//[1,2,3]
val a = arrayOf(1, 2, 3)
//[0,2,4]
val b = Array(3, { i -> (i * 2) })
注意: 与 Java 不同的是,Kotlin 中数组是不协变的(invariant)。
除了类Array,还有ByteArray, ShortArray, IntArray,用来表示各个类型的数组,省去了装箱操作,因此效率更高,其用法同Array一样:
val arr = intArrayOf(1,2,3)
字符串类型
字符串是由 String 表示的。字符串是不变的。字符串的元素可以通过索引操作读取: s[i]
for (c in str) {
println(c)
}
字符串字面值
1.Kotlin 有两种类型的字符串字面值:一种是可以带转义符的,一种是可以包含新行以及任意文本的。带转义符的 string 很像 java 的 string
val s = "Hello World!\n"
2.整行String 是由三个引号包裹的("""),不可以包含转义符但可 以包含其它字符
val text = """
for (c in "foo")
print(c)
"""
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.length is ${s.length}" // 结果为 "abc.length is 3"
val price = """
${'$'}9.99
"""