阅读完需:约 4 分钟
kotlin的基本类型与java的基本类型区别不大。
基本类型

var 与 val
var a = 2
val b = "Hello Kotlin"

声明变量


声明变量时变量的类型可写可不写,建议还是写一下。
自动推到类型例子:所有以未超出 Int
最大值的整型值初始化的变量都会推断为 Int
类型。如果初始值超过了其最大值,那么推断为 Long
类型。

在kotlin中Long类型要特别注意一下, 如需显式指定 Long
型值,请在该值后追加 L
后缀。
对于浮点数,Kotlin 提供了 Float
与 Double
类型。Float
反映了 IEEE 754 单精度,而 Double
提供了双精度。
对于以小数初始化的变量,编译器会推断为 Double
类型。 如需将一个值显式指定为 Float
类型,请添加 f
或 F
后缀。 如果这样的值包含多于 6~7 位十进制数,那么会将其舍入。
val pi = 3.14 // Double
val e = 2.7182818284 // Double
val eFloat = 2.7182818284f // Float,实际值为 2.7182817
类型转换
请注意,与一些其他语言不同,Kotlin 中的数字没有隐式拓宽转换。 例如,具有 Double
参数的函数只能对 Double
值调用,而不能对 Float
、 Int
或者其他数字值调用。

不显示转换会报错,所以需要显示转换!

字符串

字符串用 String
类型表示。字符串是不可变的。 字符串的元素——字符可以使用索引运算符访问: s[i]
。 可以用 for 循环迭代字符串:
for (c in str) {
println(c)
}
可以用 +
操作符连接字符串。这也适用于连接字符串与其他类型的值, 只要表达式中的第一个元素是字符串:
val s = "abc" + 1
println(s + "def")
在大多数情况下,优先使用字符串模板或原始字符串而不是字符串连接。
字符串字面值可以包含模板表达式 ,即一些小段代码,会求值并把结果合并到字符串中。 模板表达式以美元符($
)开头,由一个简单的名字构成:
val i = 10
println("i = $i") // 输出“i = 10”
或者用花括号括起来的任意表达式:
val s = "abc"
println("$s.length is ${s.length}") // 输出“abc.length is 3”
原始字符串与转义字符串内部都支持模板。 如果你需要在原始字符串中表示字面值 $
字符(它不支持反斜杠转义),你可以用下列语法:
val price = """
${'$'}9.99
"""
可以通过 trimMargin()
函数去除前导空格:
val n = """
<!doctype html>
<html>
<head>
<meta charset="UTF-8"/>
<title>Hello World</title>
</head>
<body>
<div id="container">
<H1>Hello World</H1>
<p>This is a demo page.</p>
</div>
</body>
</html>
""".trimIndent()
无符号类型

无符号类型是java没有而kotlin独有的,因为要兼容C
-
kotlin.UByte
: 无符号 8 比特整数,范围是 0 到 255 -
kotlin.UShort
: 无符号 16 比特整数,范围是 0 到 65535 -
kotlin.UInt
: 无符号 32 比特整数,范围是 0 到 2^32 – 1 -
kotlin.ULong
: 无符号 64 比特整数,范围是 0 到 2^64 – 1
无符号类型支持其对应有符号类型的大多数操作。
与原生类型相同,每个无符号类型都有相应的为该类型特化的表示数组的类型:
-
kotlin.UByteArray
: 无符号字节数组 -
kotlin.UShortArray
: 无符号短整型数组 -
kotlin.UIntArray
: 无符号整型数组 -
kotlin.ULongArray
: 无符号长整型数组
与有符号整型数组一样,它们提供了类似于 Array
类的 API 而没有装箱开销。
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
后缀 uL 与 UL 显式将字面值标记为无符号长整型。
val a = 1UL // ULong,即使未提供预期类型并且常量适于 UInt