Так называемые примитивные типы (Boolean, Byte, Char, Short, Int, Long, Float, Double) по своей сути неизменен. 5 - 5. 5. Вы ничего не можете сделать до 5, чтобы превратить его во что-то, что не является 5.
В противном случае неизменность - это свойство того, как хранится значение. Если сохранено в var
, то var
можно свободно заменить новым значением (совместимого типа). По существу, построенные типы (class
es, 5 и object
s) могут быть либо неизменяемыми, либо изменяемыми в зависимости от того, разрешают ли они изменять их внутреннее состояние после строительства.
Java String
(также используется как Scala's String
) является неизменным.
Однако, ничто из этого не имеет никакого отношения к вам, например, поскольку вы не демонстрировали изменчивость. Вы просто показали, что происходит, если применить метод +
одного значения к другому значению.
Хотя возможно, что можно реализовать метод +
, который мутирует его (видимый) левый операнд, редко это делает. Если есть необходимость в такой мутации, можно было бы вместо этого определить метод +=
.
+
несколько особенного в том, что оно может быть применено к любому значению (если аргумент/правый операнд) является String
силу неявного преобразования в специальный класс, который определяет +(s: String)
так, что интерпретация строки конкатенация +
. Другими словами, если вы пишете e1 + "e2"
и тип выражения e1
не определяет +
, то Scala преобразует e1
в String
и объединит его с "e2"
.
'java.lang.String' не является примитивным типом; поскольку он определен Java, Scala может работать только вокруг него, чтобы обеспечить функциональность. См. Http: // www.scala-lang.org/api/current/index.html#scala.collection.immutable.WrappedString – gzm0
хороший момент, но как насчет Int? Он расширяет оригинальные черты Scala, такие как «AnyVal», могут ли они не помечать AnyVal как неизменяемые для согласованности? – LaloInDublin
Я подозреваю, что 'Immutable' фактически был определен для определения изменяемых структур данных, таких как map, set, list и т. Д., В отношении их изменяемых копий. Он не был предназначен для родовых классов. –