当前位置: 首页 > 知识库问答 >
问题:

Kotlin的var和val有什么区别?

张俊茂
2023-03-14

Kotlin中的varval有什么区别?

如本链接所述:

只读属性声明的完整语法与可变属性声明的不同之处在于两个方面:它以val而不是var开头,并且不允许setter。

但就在前面有一个使用setter的示例。

fun copyAddress(address: Address): Address {
    val result = Address() // there's no 'new' keyword in Kotlin
    result.name = address.name // accessors are called
    result.street = address.street
    // ...
    return result
}

为什么我们两者都需要?

这不是Kotlin中变量的重复,与Java的区别:“var”vs.“val”?因为我询问的是与文档中的特定示例相关的疑问,而不仅仅是一般性的疑问。

共有1个答案

岳阳飙
2023-03-14

在您的代码中,result没有更改,但其var属性正在更改。请参阅以下注释:

fun copyAddress(address: Address): Address {
    val result = Address() // result is read only
    result.name = address.name // but not their properties.
    result.street = address.street
    // ...
    return result
}

val与Java中的final修饰符相同。您可能应该知道,我们不能再次为final变量赋值,但可以更改其属性。

 类似资料:
  • 我最近读到了关键字,我很困惑!我找不到和关键字之间的任何区别,我的意思是我们可以使用它们来创建一个不可变的变量,还有什么我遗漏的吗?

  • 问题内容: 我在此阅读了bash手册页,但我不了解其中的区别。我对它们进行了测试,它们似乎产生了完全相同的结果。 如果未通过命令行参数设置值,我想设置变量的默认值。 上面的代码回显if 为null并回显if不为null的值。这样: 根据Bash手册页, 使用默认值。如果参数未设置或为null,则替换单词的扩展名。否则,将替换参数的值。 分配默认值。如果参数未设置或为空,则将单词扩展指定给参数。然后

  • 问题内容: 我正在尝试学习科特林。是什么 ,并在科特林相比,Java的? 在Java中: 转换后显示: 问题答案: 和是可以用来声明变量(和属性)的两个关键字。区别在于,using 提供了一个只读变量,与Java中使用关键字相同。 Kotlin中的约定是在任何时候都可以使用,并且只有在知道要在某个地方更改其值时才应该使用a 。 请参阅有关定义局部变量和声明属性的官方文档。 是Java中不存在的可见

  • 我最近读到了关于const关键字的文章,我很困惑!我找不到const和val关键字之间的任何区别,我的意思是我们可以使用它们来生成一个不可变的变量,还有什么我遗漏的吗?

  • 苹果Swift语言中的和有什么区别? 在我的理解中,它是一种编译语言,但它不会在编译时检查类型。这让我很困惑。编译器如何知道类型错误?如果编译器不检查类型,难道不是生产环境的问题吗?