数据类型
数据可以有不同的类型。
为了解决一个数学问题,你写了一个表达式:
5.9 + 6
你知道将这些数字相加会产生另一个数字。Kotlin也知道这一点。你知道其中一个是一个小数(5.9
),Kotlin将其称为Double
,而另一个是一个整数(6
),Kotlin将其称为Int
。你知道结果是一个小数。
类型(也称为数据类型)告诉Kotlin你打算如何使用这些数据。类型提供了一组值,从中表达式可以取得其值。类型定义了可以对数据执行的操作,数据的含义以及如何存储该类型的值。
Kotlin使用类型来验证你的表达式是否正确。在上面的表达式中,Kotlin创建了一个新的Double
类型的值来保存结果。
Kotlin试图适应你的需求。如果你要求它执行违反类型规则的操作,它会产生一个错误消息。例如,尝试将一个String
和一个数字相加:
// DataTypes/StringPlusNumber.kt
fun main() {
println("Sally" + 5.9)
}
/* Output:
Sally5.9
*/
类型告诉Kotlin如何正确地使用它们。在这种情况下,类型规则告诉Kotlin如何将一个数字添加到一个String
中:通过连接这两个值并创建一个String
来保存结果。
现在尝试将String
和Double
相乘,将StringPlusNumber.kt
中的+
改为*
:
"Sally" * 5.9
这种方式的类型组合对Kotlin来说没有意义,因此它会给出一个错误。
在var
和val
中,我们存储了几种类型的值。Kotlin根据我们使用它们的方式推断出了类型。这被称为类型推断。
我们可以更明确地指定类型:
val identifier: Type = initialization
你首先使用val
或var
关键字,然后是标识符,冒号,类型,一个等号和初始化值。所以,不必像这样写:
val n = 1
var p = 1.2
你可以这样写:
val n: Int = 1
var p: Double = 1.2
我们告诉Kotlin n
是一个 Int
类型, p
是一个 Double
类型,而不是让它推断类型。
以下是Kotlin的一些基本类型:
// DataTypes/Types.kt
fun main() {
val whole: Int = 11 // [1]
val fractional: Double = 1.4 // [2]
val trueOrFalse: Boolean = true // [3]
val words: String = "A value" // [4]
val character: Char = 'z' // [5]
val lines: String = """Triple quotes let
you have many lines
in your string""" // [6]
println(whole)
println(fractional)
println(trueOrFalse)
println(words)
println(character)
println(lines)
}
/* Output:
11
1.4
true
A value
z
Triple quotes let
you have many lines
in your string
*/
- [1]
Int
数据类型是一个 整数,它只能保存整数。 - [2] 要保存小数,使用
Double
。 - [3]
Boolean
数据类型只能保存两个特殊值true
和false
。 - [4]
String
保存字符序列。你可以使用双引号的String
赋值。 - [5]
Char
保存一个字符。 - [6] 如果你有多行和/或特殊字符,可以用三重双引号括起来(这是一个 三重引号字符串)。
Kotlin使用类型推断来确定混合类型的含义。例如,在加法中混合使用Int
和Double
时,Kotlin会决定结果值的类型:
// DataTypes/Inference.kt
fun main() {
val n = 1 + 1.2
println(n)
}
/* Output:
2.2
*/
当使用类型推断将Int
与Double
相加时,Kotlin确定结果 n
是一个 Double
类型,并确保它遵循 Double
的所有规则。
Kotlin的类型推断是其为程序员做工作的策略的一部分。如果省略类型声明,Kotlin通常可以推断出类型。
练习和解答可以在www.AtomicKotlin.com找到。