Variable versus Read-Only
This page has been renamed to Variables versus Values.
Please update your bookmarks, and wiki pages which link here
From Comparing Programming Languages.
There are three different places you find "variables" : class fields, local variables and function arguments.
In Java a "variable" can be $$final$$, which prevents it being re-assigned. C# uses the same semantics but uses the $$readonly$$ keyword. Kotlin is different, it has two keywords $$var$$ meaning it can be re-assigned and $$val$$ meaning it can't.
I really like the Kotlin style. In fact I'd go so far as saying that Java and C# are quite simply wrong!
If I review my old Java code, there is no information that tells me if the $$final$$ keyword was omitted on purpose, or through lack of thought. What's worse, once I have reviewed all of my code, there is still no information that tells me that each "variable" has been considered.
I think names matter, if you use the wrong name, you will tend to think incorrectly. C# uses the keyword $$readonly$$, and IMHO, this is wrong. You can define a List to be $$readonly$$, but that only means it cannot be re-assigned to a different List. This List is still mutable. Neither Java's $$final$$ nor Kotlin's $$var$$ / $$val$$ keywords are misleading.
If you are keeping score : Kotlin 2, Java 1, C# zero ;-)
Kotlin has taken a more radical approach to function arguments - they are never re-assignable. I'm undecided if I approve of this. Time will tell.