Kotlin-变量

在 Kotlin 中,所有变量在使用前必须先声明。

➡️ Kotlin 是一种强类型语言,不允许像 JavaScript 那样先用后声明。
如果没有声明变量就尝试使用,会报语法错误。

➡️ 编译阶段就会报错,不能通过编译。
变量的类型声明决定了你可以在该内存位置存储的数据类型。

➡️ 比如你声明了 val age: Int,就只能存整数,不能再赋值为字符串或浮点数。
对于局部变量,变量的类型可以根据初始值自动推断出来。

➡️ Kotlin 支持 类型推断,你可以写成:
val name = "Alice" // 自动推断为 String
var age = 25 // 自动推断为 Int

不需要显式写 : String 或 : Int。

Example1:

kotlin 复制代码
fun main()
{
    var rollno : Int = 55
	var name = "Ram"
	println(rollno)
	println(name)
}

Output:

kotlin 复制代码
55
Ram

Example 2:

kotlin 复制代码
fun main()
{
	val a: Int = 1  // Explicit type declaration
	val b = 1       // Type is inferred by the compiler
    println(a)
    println(b)
}

Output:

kotlin 复制代码
1
1

上面我们有一个局部变量 rollno,它的值是 55,因为这是一个整数字面量(Int 类型),所以变量的类型是 Integer。另一个变量是 name,它的类型是 String。

在 Kotlin 中,变量可以通过两种关键字 声明:
➡️ 不可变变量:使用 val 关键字声明。一旦赋值,不可修改。
➡️ 可变变量:使用 var 关键字声明。可以被多次赋值。

不可变变量

不可变变量也称为只读变量。因此,使用 val 关键字声明的变量,其值是不能被修改的。

kotlin 复制代码
val myName = "Gaurav"
myName = "Praveen"    // compile time error

Output:

kotlin 复制代码
'val' cannot be reassigned

🧠 小贴士:👉 "不可变变量 (val) ≠ 常量 (const)"

这意味着:

  • 使用 val 声明的变量,只是不允许在赋值后再次修改
  • 但它的初始值可以是在运行时计算出来的 ,而不是必须在编译时已知
  • 如果 val 声明写在一个函数或循环体内,它在每次调用或执行时可以赋予不同的值
kotlin 复制代码
var myBirthDate = "02/12/1993"
val myNewBirthDate = myBirthDate
println(myNewBirthDate)

Output:

kotlin 复制代码
02/12/1993

可变的变量:

在可变变量中,我们可以改变变量的值.

kotlin 复制代码
var myAge = 25
myAge = 26            // compiles successfully
println("My new Age is ${myAge}")

Output:

kotlin 复制代码
My new Age is 26

Kotlin中var和val的区别

特性 var val
可修改性 变量的值可以修改 变量的值不可修改
声明方式 var 用于声明可变变量 val 用于声明只读变量
适用场景 当变量需要修改值时使用 当变量不需要修改值时使用
类型 适用于任意类型 适用于任意类型
引用类型变量 引用类型的引用可以修改 引用类型的引用不可修改,但对象内部数据可以修改
示例 var x = 10 x = 20 val y = 10 y = 20 会报错

额外说明:

对于引用类型,val 确保的是引用不变,而不是对象的内容。例如,val 声明的列表可以修改它的元素(如果该列表是可变的),但不能将其指向一个新的列表。

kotlin 复制代码
val list = mutableListOf(1, 2, 3)
list.add(4)  // 这是合法的,修改列表内容
// list = mutableListOf(5, 6)  // 错误,不能改变 list 的引用

Example1:

kotlin 复制代码
fun main()
 {
   var marks = 10
   println("Previous marks is " + marks)
   marks = 30
   println("New marks " + marks)
 }

Output:

kotlin 复制代码
Previous marks is 10
New marks 30

Example 2:

kotlin 复制代码
fun main()
{
    val marks = 10 
    println("Previous marks is " + marks)
    marks = 30 
    println("new marks " + marks)
}

Output:

kotlin 复制代码
Val cannot be reassigned

Example 3:

kotlin 复制代码
// Changing values of val object
fun main()
{
    val book = Book("Java", 1000)
    println(book)
    book.name = "Kotlin" 
    println(book)
}
data class Book(var name : String = "",
                var price : Int = 0)

Output:

kotlin 复制代码
Book(name=Java, price=1000)
Book(name=Kotlin, price=1000)

变量的作用域(scope)

变量的作用域是有限的,它只在声明它的代码块内有效({... ...})。例如,在循环内部声明的变量,只能在该循环内访问,外部无法访问。

  • 作用域范围:变量存在于它被声明的代码块(例如循环或函数)内,超出该范围就无法访问。

  • 嵌套作用域:在嵌套的循环或代码块中,即使使用相同的变量名,它们是独立的,互不影响。

  • 函数参数与局部变量:如果一个函数有参数 x,而在函数内部的循环中重新声明一个 x,那么函数内部的 x 会覆盖参数 x,即它们是不同的变量。

总结:变量的作用域限制在它声明的代码块内,同名的变量在不同作用域中是独立

命名规则

每个变量都应该使用lowerCamelCas(小驼峰)来命名

Example:

kotlin 复制代码
val myBirthDate = "02/12/1994"