В Kotlin val
означает «только для чтения», т.е. установщик для этого свойства не будет создан.Это означает, что вы не можете переназначить arr
, но вы все равно можете изменить его содержимое.
В этом разница между неизменяемостью (вы не сможете изменить содержимое массива) и только для чтения (вы не можетепереназначить переменную).
Пример:
val readOnly = arrayListOf<Int>()
readOnly.add(1) // OK
readOnly = arrayListOf() // compilation error
val immutable = Collections.unmodifiableList(arrayListOf(1))
immutable[0] = 2 // throws exception at runtime
val anotherImmutable = listOf(1)
anotherImmutable[0] = 2 // compilation error