在 Kotlin 中和 Java 一样,万物皆对象,我们可以调用任意变量的成员变量和属性。
1、数据类型
Kotlin 提供了以下数据类型:
类型 | 位宽 |
---|---|
Byte | 8 |
Short | 16 |
Int | 32 |
Float | 32 |
Long | 64 |
Double | 64 |
字面值常量
- 十进制:
123 、 长整型用 L 标记 -- 123L
- 十六进制:
0x0F
- 二进制:
00000001
浮点型
- 双精度浮点数(默认) –
Double
:123.6 - 单精度浮点数
Float
(使用 F 或 f 标记): 123.6f
注意:不支持八进制
- 双精度浮点数(默认) –
数值常量可以添加下划线 – 增加可读性(1.1 新版本特性)
val oneMillion = 1_000_000
val phoneNum = 183_8989_6767
2、字符
在 Kotlin
中用 Char
来表示,不可以直接用作数值
fun check(c: Char){
if(c == 1){//这样的表示方法在 Kotlin 中是错误的
...
}
}
一般字符使用单引号表示: 'c'
,
特殊字符使用反斜杠在转义:\t 、\b 、\n、 \r、 \'、 \"、 \\、 \$
在 Kotlin 中处理数值的方法基本和 Java 一样,但不完全相同,
- 不会自动转型。
val i: Int = 1
val d: Double = i.toDouble()
- 字符在 Kotlin 中不作为一个数字,如果需要的话需要手动进行转换
val c: Char = 'a'
val n: Int = c.toInt()
- 位运算写法不同
//Java
int or = FLAG1 | FLAG2
int and = FLAG1 & FLAG2
//Kotlin
val or = FLAG1 or FLAG2
val and = FLAG1 and FLAG2
操作符:
shl(bits) – 有符号左移 (相当于 Java << )
shr(bits) – 有符号右移(相当于 Java>> )
ushr(bits) – 无符号右移 (相当于 Java >>> )
and(bits) – 按位与
xor(bits) – 按位异或
inv(bits) – 按位翻转
3、布尔值
和 Java 一样,在 Kotlin 中布尔值只有 true
和 false
两个值,但是其表示方法略有不同为:Boolean
4、数组 – Array
在 Kotlin
中数组用 Array
表示 ,其本身有 set
和 get
方法、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)
来构建一个数组,也可以使用 arrayOfNulls()
来构建一个 空数组
。另外一种构建数组的方式:使用工厂函数 – 接受一个数组大小的参数 i
以及一个根据给定索引 i
创建数组元素的函数,举个例子如下
// 创建一个 Array<String> 内容为 ["0", "1", "4", "9", "16"]
val asc = Array(5, {i -> (i * i).toString() })
注意: 在 Kotlin 中 Array 是不可变得,意味着 Kotlin 中 Array 转型 Array 的操作是非法的。
同时 Kotlin 中还存在基本数据类型的专有数组:ByteArray、IntArray
等,这就避免了过度装箱,而且这些类与 Array
没有继承关系,但是他们拥有相同的库函数。
5、字符串 – String
像 Java 中一样, Kotlin 中的字符串同样使用 String
表示,字符串的元素也可以通过索引读取: str[i]
for(s in str){
println(s)
}
字符串字面值
Kotlin 有两种类型的字符串字面值:一种是可以带转义符的,一种是可以包含新行
以及任意文本的。
- 带转义符的 string 很像 java 的 string:
val s = "Hello World!\n"
转义是使用传统的反斜线的方式。 - 整行String 是由三个引号包裹的( “”” ),不可以包含转义符但可 以包含其它字符:
val text = """
for (c in "foo")
print(c)
"""
你可以通过 trim-margin() 函数移除空格:
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"
或者可以为一个包含在大括号中的任意表达式:
val s = "str"
val str = "s.length is ${s.length}"