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

科特林术语“可变”错了吗?

马业
2023-03-14

我对事物的理解是,“变量”一词指的是重新分配引用的能力。“常量”表示无法重新分配引用。本质上是Java中final与not的区别。

var something = new obj() -> reference can be re-assigned  
val something = new obj() -> cannot be re-assigned

对我来说,“可变性”意味着修改REFERAND/OBJECT本身的能力,而不是它的引用。即被引用的对象。但是静态编程语言并不能阻止这一点。

你可以

val something = new obj()

但仍然能够“变异”该obj()而无需重新分配给新标识符。

我是误解了什么,还是用词不当?

共有1个答案

傅翰池
2023-03-14

val和var只控制引用的不变性,而不是它所指向的对象。

来自Kotlin的行动

声明变量有两个关键字:

  1. val(从值)-不可变引用。用val声明的变量在初始化后无法重新分配。它对应于Java中的final变量
  2. var(来自变量)-可变参考。可以更改此类变量的值。此声明对应于一个常规(非最终)Java变量

请注意,即使引用本身是不可变的并且不能更改,它指向的对象也可能是可变的。例如,此代码完全有效:

val languages = arrayListOf("Java")
languages.add("Kotlin")

 类似资料:
  • 如何在使用Kotlin的Spring Boot中正确初始化ConfigurationProperties? 目前我喜欢下面的例子: 但是它看起来很丑陋,实际上不是一个iable,foo是常量ue,应该在启动期间初始化,将来不会改变。

  • 我试着用各种“Rest”和“atOnceUser”进行注射。我在留档上没有找到一个好的解决方案。 我的方法是使用本地计数器创建一个名为“getNextNumber()”的函数,以增加“atOnceUser”的数量,但该函数一开始只调用一次。 有什么想法吗? 我的代码:

  • 问题内容: 我正在学习具有C ++和Java背景的Kotlin。我期待下面的打印,不。我知道这对应到。默认实现不比较每个成员,即和吗?如果是这样,它会不会看到字符串值相等(因为再次映射到字符串值)?显然,我在Kotlin中还没有涉及平等与身份相关的问题。 问题答案: 您描述的默认实现仅适用于数据类。不适用于从中继承实现的常规类,只需使对象与自身相等即可。

  • 这是正确的吗? 我可以找到一个相关的问题,但它是有参数的,我不能在没有params的情况下转换它。

  • 我遵循这个示例https://github.com/joanby/android-mvp/blob/master/moviesfeed/app/src/main/java/com/juangabriel/moviesfeed/movies/moviesrepository.java 现在我想做这样的事情: 因此,正如我所看到的,他填充了结果列表,然后在演示者上执行以下操作:https://gith