思维导图|kotlin基础数据类型

大家好,我是青空。

这次我整理了kotlin 的基础数据类型,我们先看一下思维导图。

图片

数字

基本分类及介绍

首先我们先看看整数类型,整数类型又分为 Byte、Short、Int、 Long。

类型大小 (bits)最小值最大值
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)

所有以不超过Int最大值的整数值初始化的变量都具有推断类型Int。如果初始值超过该值,则类型为Long。要显式指定Long值,请将后缀L附加到该值。

val one = 1 // Int
val threeBillion = 3000000000 // Long
val oneLong = 1L // Long
val oneByte: Byte = 1

浮点数可以分为 Float(32位)、Double(64位)。

类型大小(bits)有效位指数位数值位数
Float322486-7
Double64531115-16
字面常量
  • 数值: 123

  • 多头由大写字母L: 123L标记

  • 十六进制: 0x0F

  • 二进制文件: 0b00001011

不支持八进制文字。

Kotlin还支持传统的浮点数表示法:

  • Double 默认: 123.5 123.5e10

  • 浮动标记f或F: 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 b: Byte = 1 // OK, 字面值是静态检测的
val i: Int = b // 错误
Type mismatch: inferred type is Byte but Int was expected
val i: Int = b.toInt() // OK:显式拓宽

每个数字类型支持如下的转换:

  • toByte(): Byte

  • toShort(): Short

  • toInt(): Int

  • toLong(): Long

  • toFloat(): Float

  • toDouble(): Double

  • toChar(): Char

类型会从上下文推断出来

val l = 1L + 3 // Long + Int => Long

运算
  • 基本和java一样
位运算
  • 没有特殊字符来表示

  • 只可用中缀方式调用命名函数

val x = (1 shl 2) and 0x000FF000

位操作符

对于Int和Long类型与java一样

  • shl(bits) – 左移位 (Java’s <<)

  • shr(bits) – 右移位 (Java’s >>)

  • ushr(bits) – 无符号右移位 (Java’s >>>)

  • and(bits) – 与

  • or(bits) – 或

  • xor(bits) – 异或

  • inv() – 反向

浮点数比较

  • 相等性检测:a == b 与 a != b

  • 比较操作符:a < b、 a > b、 a <= b、 a >= b

  • 区间实例以及区间检测:a…b、 x in a…b、 x !in a…b

  • 若a\b的类型已知或可推导。

  • 当这些操作数并非静态类型为浮点数

  • 会出现

  • 认为 NaN 与其自身相等

  • 认为 NaN 比包括正无穷大 (POSITIVE_INFINITY)在内的任何其他元素都大

  • 认为 -0.0 小于 0.0

字符

用 Char 类型表示,Char 必须是单引号 ’ 包含起来,大体与java一样

Kotlin 中的 Char 不能直接当作数字,与数字操作

布尔

与java一样

数组

创建两种方式

arrayOf(1, 2, 3)
// 创建一个 Array 初始化为 ["0", "2", "4"]
Array(3, { i -> (i * 2) })

Array中的{}代表了进行数值生成。若{}中没有内容,则输出Kotlin.Unit ,Unit约等于void

除了类Array,还有ByteArray, ShortArray, IntArray

范例

// Array of int of size 5 with values [0, 0, 0, 0, 0]
val arr = IntArray(5)
// e.g. initialise the values in the array with a constant
// Array of int of size 5 with values [42, 42, 42, 42, 42]
val arr = IntArray(5) { 42 }
// e.g. initialise the values in the array using a lambda
// Array of int of size 5 with values [0, 1, 2, 3, 4] (values initialised to their index value)
var arr = IntArray(5, { it * 1 })

范例很好的解释了初始化数值会如何生成

无符号

无符号整型

  • kotlin.UByte: 无符号 8 比特整数,范围是 0 到 255

  • kotlin.UShort: 无符号 16 比特整数,范围是 0 到 65535

  • kotlin.UInt: 无符号 32 比特整数,范围是 0 到 2^32 - 1

  • kotlin.ULong: 无符号 64 比特整数,范围是 0 到 2^64 - 1

还处于beta阶段,谨慎使用,并且目前是实验性的

  • kotlin.UByteArray: 无符号字节数组

  • kotlin.UShortArray: 无符号短整型数组

  • kotlin.UIntArray: 无符号整型数组

  • kotlin.ULongArray: 无符号长整型数组

字面值

后缀 u 与 U 将字面值标记为无符号,如果没有提供预期的类型,会根据字面值大小选择 UInt 或者 ULong

范例

val b: UByte = 1u  // UByte,已提供预期类型
val s: UShort = 1u // UShort,已提供预期类型
val l: ULong = 1u  // ULong,已提供预期类型
val a1 = 42u // UInt:未提供预期类型,常量适于 UInt
val a2 = 0xFFFF_FFFF_FFFFu // ULong:未提供预期类型,常量不适于 UInt

字符串

字符串是不可变的

字符串模板

模板表达式以美元符($)开头

"i = $i"
"$s.length is ${s.length}"

字符串字面值

原始字符串 使用三个引号("""),默认 | 用作边界前缀,可以选择其他字符并作为参数传入,比如 trimMargin(">")。

范例

val text = """
|Tell me and I forget.
|Teach me and I remember.
|Involve me and I learn.
|(Benjamin Franklin)
""".trimMargin()

转义字符串 使用一个引号(")

字符串模板

以美元符($)开头,用花括号括起来的任意表达式

  • 范例
val s = "abc"
println("$s.length is ${s.length}")

输出“abc.length is 3”

val price = """
{'{'了解 LaTeX 语法
确定
'}9.99
"""

输出$9.99

如果想要思维导图的话,可以关注公众号留言,或者联系我哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值