kotlin学习-数据类型
基本数据类型
Number
- 数字中间可以用_拼接增加可读性,如:123_000、123_000.000_123
- 使用类型+?标记数据可为空,当为可空时,每次赋值都是一个新的引用地址,此时使用===返回false,但是在JVM环境下,会对-128至127的数字做内存优化===时会返回true
val a = 10000
val a0 = a
val a1 = a
val a2: Int? = a
val a3: Int? = a
println(a0 == a1) // true
println(a0 === a1) // true
println(a2 == a3) // true
println(a2 === a3) // false
- 提供方法toByte、toShort、toInt、toLong、toFloat、toDouble用于类型转换
整数类型
类型 | Size (bits) | 最小值 | 最大值 |
---|---|---|---|
Byte | 8 | -128 | 127 |
Short | 16 | -32768 | 32767 |
Int | 32 | -2,147,483,648 (-231) | 2,147,483,647 (231 - 1) |
Long | 64 | -9,223,372,036,854,775,808 (-263) | 9,223,372,036,854,775,807 (263 - 1) |
explicit: 明确的
infer: 推断
exceed: 超过、超出
如果未指定类型,编译器会自动推断为Int或者Long(值超出Int范围)
Long类型可以在数字末尾加L指定,如:1L
小数类型
发现问题:println(123456.123F)打印出来是123456.125,感觉尽量不要用Float类型
类型 | Size(bits) | Significant bits | Exponent bits | Decimal digits |
---|---|---|---|---|
Float | 32 | 24 | 8 | 6-7 |
Double | 64 | 53 | 11 | 15-16 |
如果未指定类型,编译器会自动推断为Double
Float类型可以在数字末尾加F或f指定,如:1F
Boolean
boolean类型与其它语言类似,赋值:val a: True = true
,并提供||
、&&
、!
用于操作布尔数据
Char
字符类型使用单引号('
)包裹,可以为单个字符、转译字符、unicode字符
特殊字符转译规则如下:
字符 | 含义 |
---|---|
\t | tab |
\b | backspace |
\n | 换行 |
\r | 回车 |
’ | 单引号 |
” | 双引号 |
\ | 反斜杠 |
$ | $符号 |
String
字符串使用双引号("
)包裹,字符串分为转译字符串和原始字符串
- 转译字符串(一个双引号包裹):即会标识转译字符的字符串,如:
val s = "Hello, world!\n"
- 原始字符串(三个双引号包裹): 可使用trimMargin方法去处首尾空格, 与Python有点类似
可使用模版语法,与ES6的模版语法类似,可以是$var
、${var}
Array
数组的使用与Python的list没啥区别,区别比较大的是如何创建数组
通过构造函数的有Array、arrayOfNulls、IntArray、ByteArray、ShortArray、FloatArray、DoubleArray,示例:val a = Array(5) { it * 2 } // 0 2 4 6 8
,其中it表示数组下标
通过创建方法的有arrayOf、intArrayOf、byteArrayOf、shortArrayOf、floatArrayOf、doubleArrayOf,示例:val a = arrayOf(0, 2, 4, 6, 8) // 0 2 4 6 8
使用:
val a = Array(5) { it * 2 }
a[0] = 10
a.get(0)
a.set(0, 10)
类型检测
使用is
和!is
检测类型,如:x is String
、y !is String
配合when使用:
when (x) {
is Int -> print(x + 1)
is String -> print(x.length + 1)
is IntArray -> print(x.sum())
}
使用as
转换类型,如:val x: String = y as String
、val x: String? = y as? String
,使用as?
时当转换失败返回null