I am getting confused in use of var and val in access modifers, name is var , therefore we can change it, it is ok. But p is val, how we are able to change the p.name = \"Fred F
You should remember that variables are just references. So when you create variable with val
it means that you can't assign new reference to it. In var
case its possible.
As you see when you create val p = new Person("Alvin Alexander")
p will have reference to same Person
object always. You can't create another Person
and assign it to p
But any person instance has var name
variable which is reassignable to new strings.
As a result final p
has reference to mutable Person
instance.
val
or var
works only for next variable (on it's reference), it does not indicate whether variable is mutable or not. In your example, p
is mutable (because one can change p.name
). But you cannot write p = anotherPerson
.