kotlin 基本数据类型

133 阅读2分钟

1. 边界

类型大小(比特数)最小值最大值
Byte8-128127
Short16-3276832767
Int32-2,147,483,648 (-2^31)2,147,483,647 (2^31 - 1)
Long64-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(): Byte
  • toShort(): Short
  • toInt(): Int
  • toLong(): Long
  • toFloat(): Float
  • toDouble(): Double
  • toChar(): Char 但是呢,kotlin 在使用运算的时候,不用来回转换类型,因为它会推断类型
val l = 1L + 3 // Long + Int => Long