Kotlin 中的基本数值类型有 Byte,short,Int,Long,Float,Double
| 类型 | 宽度 |
|---|---|
| Double | 64 |
| Float | 32 |
| Long | 64 |
| Int | 32 |
| Short | 16 |
| Byte | 8 |
字面常量
- 十进制: 123
- 长整型以大写的L结尾: 123L
- 16进制以0x开头: 0x1235F
- 2进制以0b开头: 0b001100101
- 不支持8进制
- Double默认写法: 123.5e10 或 123.5
- Float使用f或F后缀: 123.5f 或 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 tt : Int = 393
val tt1 : Int = tt
val tt2 : Int? = tt
println(tt===tt1)
println(tt===tt2)
println(tt==tt1)
println(tt==tt2)
上面的代码,把 Int 型的 tt 创建了两个类型不同的对象 tt1 和 tt2。
tt1 和 tt 类型相同。使用 === 和 == 分别看比较的结果如下
true
false
true
true
可知 Int? 类型的 tt2 与 tt 的对象地址不同。而值是相同的。
类型转换
数值间类型转换,较小类型不能隐性转换成较大类型。因此需要显性转换。
toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char
位运算
对于 Int 和 Long 可以进行位运算
shl(bits) – 左移位 (Java’s <<)
shr(bits) – 右移位 (Java’s >>)
ushr(bits) – 无符号右移位 (Java’s >>>)
and(bits) – 与
or(bits) – 或
xor(bits) – 异或
inv() – 反向
位运算示例
val x = (1 shl 2)
println(x)
打印结果是
4
位运算示例
val x = (1 shl 2) and 0x000ff000
println(x)
打印结果是
0
字符
字符需要使用单引号包起来,像这样 'a'
可以显式的把字符转为 Int 数字
println('c'.toInt())
输出结果为 99
数组
数组创建有两种方式:一种是使用函数 arrayOf();另一种是使用工厂函数。
val a = arrayOf(1, 2, 3, 4, 5)
val b = Array(3, {i ->(i*2)})
println(a[0])
println(a[1])
println(a[2])
println(a[3])
println(a[4])
// println(a[5])
println(b[0])
println(b[1])
println(b[2])
运行结果
1
2
3
4
5
0
2
4
如果把 a[5] 的注释标记去掉,运行结果就只会打印到 5,因为 a[5] 是不存在的,此处已经发生错误,后面的结果也无法打印了。
Array(元素个数,{元素参数->公式})
i 从0 起步
字符串
字符串可以使用 [] 符号加下标,来访问串中的任意字符。
还可以用 """ 这样的三个双引号括起来多行文本。可以在行使用 | ,并在字符串赋值的尾部加上 .trimMargin() 来消除前置的空格。
val a1:String = "lkjasdfalkdj"
val b1 = """
牛皮不是吹的
火车不是推的
戏法是变的
魔法是不会的
"""
val c1 = """
|牛皮不是吹的
|火车不是推的
|戏法是变的
|魔法是不会的
""".trimMargin()
println(a1)
println(b1)
println(c1)
运行结果如下
lkjasdfalkdj
牛皮不是吹的
火车不是推的
戏法是变的
魔法是不会的
牛皮不是吹的
火车不是推的
戏法是变的
魔法是不会的














网友评论