首页 > 解决方案 > kotlin var 的工作方式就像它是不可变的

问题描述

我试图找出 kotlin 中可变和不变性的区别。

    var a = "abcd"
    println(System.identityHashCode(a)) //495053715
    var b = a
    a = "1234"
    println(System.identityHashCode(a)) //1922154895
    println(System.identityHashCode(b)) // 495053715

最初,a有一些价值。因此,在字符串池中创建了一个对象,并将其引用提供给a
该对象的哈希码为的变量495053715

然后,b被赋值为a
So,其hashcode同上。这是错误的,我稍后会解释

现在,当a值发生变化时,它的行为就像是不可变的。

为什么它又创建了一个带有哈希码的对象1922154895来加载值“1234”?

据我说,

如果它满足以上几点,那么我可以接受它Mutable。所以请用例子来澄清我。

标签: kotlin

解决方案


您将mutable一词的两种不同含义混为一谈。

当我们说变量属性是可变的(使用var关键字)时,这意味着我们可以重新分配它以指向不同的对象。

当我们说一个对象是可变的时,这意味着它包含公开可变的属性。

将属性或变量标记为可变var允许将其重新分配以指向不同的对象。它对那些指向的对象是否可变没有影响。它不能赋予它碰巧指向的任何对象可变的属性。

String总是不可变的。AString var是可以重新分配以指向不同的不可变Strings 的。

您在评论中提到了对 Java 的熟悉程度。var与 Java 中未标记为的任何变量完全相同final


推荐阅读