原文: https://beginnersbook.com/2017/12/kotlin-variables-data-types/

有两种类型的变量 - 可变和不可变。不可变变量是不能更改其值的变量,也称为不可变或只读变量。另一方面,可变变量的值可以改变。

不可变变量:val关键字

在 Kotlin 中使用val关键字声明不可变变量。在这个例子中,我们使用val关键字声明了一个不可变变量myName,后来显示了它的值。

  1. /**
  2. * created by Chaitanya for Beginnersbook.com
  3. */
  4. package beginnersbook
  5. fun main(args : Array<String>){
  6. /**
  7. * This is an immutable variable
  8. * also called unchangeable variable
  9. * or read-only variable.
  10. */
  11. val myName = "Chaitanya"
  12. println("My Name is: "+myName)
  13. }

输出:

Kotlin 变量和数据类型 - 图1

当我们尝试更改不可变变量的值时会发生什么?

如果我们尝试更改不可变变量的值,我们将得到一个编译错误,就像我们在下面的例子中得到的那样。

  1. /**
  2. * created by Chaitanya for Beginnersbook.com
  3. */
  4. package beginnersbook
  5. fun main(args : Array<String>){
  6. /**
  7. * This is an immutable variable
  8. * also called unchangeable variable
  9. * or read-only variable.
  10. */
  11. val myName = "Chaitanya"
  12. myName="Chaitanya Singh"
  13. println("My Name is: "+myName)
  14. }

输出:

  1. Error:(13, 5) Kotlin: Val cannot be reassigned

可变变量:var关键字

与不可变变量不同,我们可以更改可变变量的值。在 kotlin 中,我们使用var关键字来声明一个可变变量。让我们举一个例子来理解这一点。

在这个例子中,我们使用var关键字声明了一个可变变量,为了证明我们可以改变它的值,我们已经为myName变量重新分配了一个不同的值。

  1. /**
  2. * created by Chaitanya for Beginnersbook.com
  3. */
  4. package beginnersbook
  5. fun main(args : Array<String>){
  6. /**
  7. * This is an mutable variable
  8. * we can change the value of this
  9. * variable
  10. */
  11. var myName = "Chaitanya"
  12. myName="Chaitanya Singh"
  13. println("My Name is: "+myName)
  14. }

输出:

Kotlin 变量和数据类型 - 图2

什么是变量?

变量是一个名称,赋予内存中可以保存数据的位置。例如,当我声明这样的变量时:

  1. var website = "beginnersbook"

数据"beginnersbook"存储在特定位置的存储器中,称为website

这里var是一个用于声明变量的关键字,website是一个标识符(变量的名称),"beginnersbook"是数据(变量的值),变量的类型是String(我们稍后会讨论) 。

另请阅读: Kotlin 关键字和标识符

类型推断

正如我们前面提到的,我们可以在单个语句中声明和初始化变量,如下所示:

  1. var website = "beginnersbook"

在上面的语句中我们没有指定变量的类型,kotlin 知道变量website是一个字符串。编译器可以通过查看值来了解变量的类型。

但是,如果您想明确提及变量的类型,那么您可以这样做:

  1. var website: String = "beginnersbook"

这里我们已经明确地将变量website的类型称为String

首先声明并稍后初始化:

我们可以先声明变量,然后我们可以在程序中稍后初始化它。这里要注意的重点是,我们这样做,你必须在声明期间指定变量的类型。

  1. //It is mandatory to specify the type in this case
  2. var website: String
  3. website = "beginnersbook"

Kotlin 数据类型

  1. 数字 - ByteShort,Int,LongFloatDouble
  2. Boolean - truefalse
  3. Char
  4. Array
  5. String

数字

我们有几种数据类型来表示 Kotlin 中的数字。

1.字节

字节数据类型的范围是 -128 到 127.这用于表示较小的整数值。

  1. fun main(args : Array) {
  2. val num: Byte = 99
  3. println("$num")
  4. }

输出:

  1. 99

您必须了解数据类型的范围以避免错误。例如,以下代码将生成错误,因为分配给byte类型的变量的值不在该范围内。

  1. fun main(args : Array) {
  2. //Range is -128 to 127
  3. val num: Byte = 300
  4. println("$num")
  5. }

输出:错误

我们也可以知道数据类型的最小值和最大值,如下所示:

  1. /**
  2. * created by Chaitanya for Beginnersbook.com
  3. */
  4. package beginnersbook
  5. fun main(args : Array<String>){
  6. var bigByte: Byte = Byte.MAX_VALUE
  7. var smallByte: Byte = Byte.MIN_VALUE
  8. println("Biggest Byte value is: " + bigByte)
  9. /**
  10. * I can use String interpolation and put
  11. * the variable inside quotes to display its
  12. * value
  13. */
  14. println("Smallest Byte value is: $smallByte")
  15. }

输出:

Kotlin 变量和数据类型 - 图3

2.Short

Short数据类型的范围是-32768 到 32767。

  1. fun main(args : Array) {
  2. val num: Short = 29999
  3. println("$num")
  4. }

输出:

  1. 29999

您可能想知道我们何时在Short数据类型中有更大的范围,为什么我们使用Byte数据类型?
这是为了节省内存。与字节数据类型相比,短数据类型保留更多内存,因此如果您确定该值将在-128 到 127 的限制内,则从内存角度来看,字节数据类型将是更好的选择

Int

Int数据类型的范围是-2 ** 312 ** 31 - 1

  1. fun main(args : Array) {
  2. val num: Int = 123456
  3. println("$num")
  4. }

输出:

  1. 123456

注意:如果你没有明确指定变量的类型,那么编译器会将该变量视为Int,如果值介于-2 ** 312 ** 31 - 1

Long

Long数据类型的范围是-2 ** 632 ** 63 - 1

  1. fun main(args : Array) {
  2. val num: Long = 12345678
  3. println("$num")
  4. }

输出:

  1. 12345678

注意:如果没有明确指定变量的类型,那么编译器会将该变量视为 Long,如果该值超出-2 ** 312 ** 31 - 1但位于-2 ** 632 ** 63 - 1的范围内

5.Double

  1. fun main(args : Array) {
  2. // all floating numbers are double by default
  3. // unless you suffix the value with F letter
  4. val num = 101.99
  5. println("$num")
  6. }

输出:

  1. 101.99

6.Float

  1. fun main(args : Array) {
  2. // This is a float data type as we have suffixed
  3. // the value with letter 'F'
  4. val num = 101.99F
  5. println("$num")
  6. }

输出:

  1. 101.99

Boolean

布尔变量的值为truefalse

  1. fun main(args : Array) {
  2. val boolValue = false
  3. println("$boolValue")
  4. }

输出:

  1. false

Char

所有英文字母(小写或大写)都包含在Char数据类型中。您不能将数字分配给Char数据类型的变量。

  1. fun main(args : Array) {
  2. val ch = 'A'
  3. println("$ch")
  4. val ch2: Char
  5. ch2 = 'Z'
  6. println("$ch2")
  7. }

输出:

  1. A
  2. Z