在Kotlin中,一切都是对象,任何变量都有函数和属性。但是有一些类型是嵌入式的,因为这样是最优化的。但是,用户可能会认为这些类型就是普通类。所以定义了一些基本类型:数值类型,字符类型,布尔类型和数组类型。
数值类型
Kotlin的数值类型,类似于Java,但也有差异处。例如,kotlin没有隐式转换,而且字面值也略有不同。
6种基本数值类型
下面类型和Java一样
类型 | 字节数 | Java字节数 |
---|---|---|
Double | 64 | 64 |
Float | 32 | 32 |
Long | 64 | 64 |
Int | 32 | 32 |
Short | 16 | 16 |
Byte | 8 | 8 |
字面常量
- 10进制:123
- Long类型,需要加L:123L
- 16进制:0x0F
- 二进制:0b00001011
8进制的字面值是不支持的。
Kotlin也支持传统浮点数表示法
- 默认Double表示法:123.5, 123.5e10
- 浮点数Float,用
f
或F
表示:123.5f
数值型中的下划线
类似于标准数值表示中带有,
,在kotlin程序中中_
替代,可读性更高
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 = 10000
print(a === a) // Prints 'true'
val boxedA: Int? = a
val anotherBoxedA: Int? = a
print(boxedA === anotherBoxedA) // !!!Prints 'false'!!!
== 值相等
val a: Int = 10000
print(a == a) // Prints 'true'
val boxedA: Int? = a
val anotherBoxedA: Int? = a
print(boxedA == anotherBoxedA) // Prints 'true'
显式转换
段类型无法转换为长类型,如果非要转换,需要显式转换
val a: Int? = 1
val b: Long? = a
print(a == b)
a和b无法进行比较,直接报错
不同大小的数值型也不能相互赋值
val b: Byte = 1
val i: Int = b
正确做法是使用显式转换方法:
val i: Int = b.toInt()
其他显式转换方法:
- toByte(): Byte
- toShort(): Short
- toInt(): Int
- toLong(): Long
- toFloat(): Float
- toDouble(): Double
- toChar(): Char
也有少量无需显式转换,比如根据上下文推断类型的,比如:
val l = 3L + 1
操作符
操作符 | Java表示法 | 意义 |
---|---|---|
shl(bits) | << |
左移 |
shr(bits) | >> |
右移 |
ushr(bits) | >>> |
无符号右移 |
and(bits) | & | 位和 |
or(bits) | | | 位或 |
xor(bits) | ^ | 按位异或 |
inv() | ~ | 位非 |
字符类型
Kotlin
中用Char
表示字符类型,非数值类型。字符类型不能直接当成数值类型
可以使用显式转换
fun decimalDigitValue(c: Char): Int {
if (c !in '0'..'9')
throw IllegalArgumentException("Out of range")
return c.toInt() - '0'.toInt() // Explicit conversions to numbers
}
布尔值类型
True/False
- || – 或
- && – 并
- ! - 非
数组类型
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>
// ...
}
创建array
val array1 = arrayOf(1,2,3)
创建空array
创建大小为4,类型为Int的数组
val array2 = arrayOfNulls<Int>(4)
带函数
创建一个Array[0,1,4,9,16]的数组,后面的函数是作用在每个元素上的
val asc = Array(5, { i -> (i * i).toString() })
与Java不同的是,Kotlin中的array是不可变的。
Array的衍生类
- ByteArray
- IntArray
- ShortArray
创建特殊实例的Array
val x: IntArray = intArrayOf(1, 2, 3)
x[0] = x[1] + x[2]
字符串
String表示
字符串为不可变对象,可用下标获取字符串每个字符
for (c in str) {
println(c)
}
"""
三个分隔号,可以包含多行字符串
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去除字符串的每行的空格和前缀。前缀默认是|
,如果字符串的前缀有其他字符串,可以传入参数,来进行去除
请关注我的微信公众号号,实时接收最新文章