1. 边界
| 类型 | 大小(比特数) | 最小值 | 最大值 |
|---|---|---|---|
| Byte | 8 | -128 | 127 |
| Short | 16 | -32768 | 32767 |
| Int | 32 | -2,147,483,648 (-2^31) | 2,147,483,647 (2^31 - 1) |
| Long | 64 | -9,223,372,036,854,775,808 (-2^63) | 9,223,372,036,854,775,807 (2^63 - 1) |
其实和 java 边界没有啥不同,这里就不多说了。需要说明的是自 kotlin 1.1 之后,也可以用下划线来实现计数法了
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
2. 数据类型转换
kotlin 如果想转换类型,请不要像 java 那样在转换了
1)显式转换
由于不同的表示方式,较小类型并不是较大类型的子类型。 如果它们是的话,就会出现下述问题:
// 假想的代码,实际上并不能编译:
val a: Int? = 1 // 一个装箱的 Int (java.lang.Integer)
val b: Long? = a // 隐式转换产生一个装箱的 Long (java.lang.Long)
print(b == a) // 惊!这将输出“false”鉴于 Long 的 equals() 会检测另一个是否也为 Long
所以相等性会在所有地方悄无声息地失去,更别说同一性了。
因此较小的类型不能隐式转换为较大的类型。 这意味着在不进行显式转换的情况下我们不能把 Byte 型值赋给一个 Int 变量。
val b: Byte = 1
val i: Int = b // 错误
我们可以显式转换来拓宽数字
val i: Int = b.toInt()
print(i)
每个数字类型支持如下的转换:
toByte(): BytetoShort(): ShorttoInt(): InttoLong(): LongtoFloat(): FloattoDouble(): DoubletoChar(): Char但是呢,kotlin 在使用运算的时候,不用来回转换类型,因为它会推断类型
val l = 1L + 3 // Long + Int => Long