kotlin вар работает как неизменный - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь выяснить разницу между изменяемыми и неизменяемыми в 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
Итак, его хеш-код такой же, как и выше. что неправильно, я объясню позже

Теперь, когда значение a изменено, оно действует как неизменяемое.

Почему он создал еще один объект с хеш-кодом 1922154895 для загрузки значения "1234"?

По моему мнению,

  • он должен перезаписать значение в объекте 495053715, предыдущее значение которого равно "abcd"

  • Затем для b должен быть создан новый объект

Если он удовлетворяет вышеуказанным пунктам, тогда я могу принять его как Mutable. Поэтому, пожалуйста, разъясните мне примеры.

1 Ответ

0 голосов
/ 12 апреля 2020

Вы объединяете два разных значения для слова изменяемое .

Когда мы говорим, что переменная или свойство является изменяемым (с ключевое слово var, это означает, что мы можем переназначить его для указания на другой объект.

Когда мы говорим, что объект является изменяемым, это означает, что содержит общедоступные изменяемые свойства.

Пометка свойства или переменной, изменяемой с помощью var, позволяет переназначить его для указания на другие объекты. Это не влияет на то, являются ли эти указанные объекты изменчивыми или нет. Он не может даровать изменяемые свойства объектам, на которые он указывает.

String всегда неизменен. A String var - это тот, который может быть переназначен для указания на различные неизменные String s.

Вы упомянули знакомство с Java в комментариях. var точно так же, как любая переменная в Java, которую вы не пометили как final.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...