apply 函数不适用于 kotlin 中的基本类型

apply function does not work for basic types in kotlin

我正在尝试使用 apply 函数为变量分配新值。 当我尝试 apply() 将值重新分配给数据 class 的参数时,它工作正常。但是当我没有数据时 class 它不起作用!

数据class示例:

    data class A(
        var a: Int,
    )

    val a1 = A(3)
    val a2 = a1.apply {
        a = 5
    }
    println("a1 = ${a1.a}, a2 = ${a2.a}")

基本类型示例:

    var a1 = 3
    var a2 = a1.apply {
        a1 = 5
    }
    println("a1 = $a1, a2 = $a2")

第一个例子的结果是:

a1 = 5, a2 = 5

但是第二个例子的结果是:

a1 = 5, a2 = 3

我不明白为什么 a2 仍然是 3 并且申请对它不起作用! 我希望 a1 = 5 将 5 值重新分配给 a2 但它没有! 能解释一下吗?

Int class 是不可变的。您不能更改它的实例的值。请注意您的两个代码示例中的差异。首先,您要将 A class 的 a 属性 更改为不同的值。所以,你正在 变异 A 的实例。

在您的第二个代码示例中,您没有更改实例内部的值。您正在更改变量 a1 以指向一个完全不同的 Int 实例。您的 apply 块毫无意义,因为您没有使用它来调用 Int class 的任何 member 函数或属性。您正在直接重新分配变量 a1.

所有 Kotlin 标准库 Number classes 以及 String、BigInteger 和 BigDecimal 都是不可变的 classes,您无法更改实例内部的值。您只能重新分配 variables/properties 以指向其他实例。