Kotlin 术语“可变”是错误的吗?

hea*_*low 5 java variables android constants kotlin

我的理解方式是,“变量”一词指的是重新分配引用的能力。“常量”意味着不能重新分配引用。Java中final和not的本质区别。

var something = new obj() -> reference can be re-assigned  
val something = new obj() -> cannot be re-assigned
Run Code Online (Sandbox Code Playgroud)

对我来说,“可变性”意味着修改 REFERAND/OBJECT 本身的能力,而不是修改它的引用。IE被引用的对象。但 Kotlin 并不能阻止这种情况。

你可以有

val something = new obj()
Run Code Online (Sandbox Code Playgroud)

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

我是否误解了什么,或者这是用词不当?

mig*_*WOZ 8

val并且var只控制引用的不变性,而不控制它指向的对象。

\n

来自Kotlin 的实际应用

\n
\n

声明变量有两个关键字:

\n
    \n
  1. val(来自值)\xe2\x80\x94不可变引用。val用\xe2\x80\x99声明的变量在初始化后不能重新赋值。它对应于finalJava 中的\n变量。
  2. \n
  3. var(来自变量)\xe2\x80\x94可变引用。这种变量的值是可以改变的。此声明对应于常规(非最终)Java 变量。
  4. \n
\n

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

\n
val languages = arrayListOf("Java")\nlanguages.add("Kotlin")\n
Run Code Online (Sandbox Code Playgroud)\n
\n

  • 不可变类是指其状态属性全部不可变的类。这确实是同一个词,意思是同一个东西。 (2认同)