What is the difference between val and var?
Assesses fundamental understanding of Kotlin conventions, runtime behavior, and memory/performance considerations.
Hiring managers look for precision, avoidance of ambiguous jargon, and ability to explain trade-offs under real production conditions.
val declares a read-only reference that cannot be reassigned after initialisation. var declares a mutable reference that can be reassigned.
val name = "Ada" // cannot reassign
var count = 0
count += 1 // ok
val list = mutableListOf(1)
list.add(2) // ok: the reference is fixed, contents are mutable
The restriction applies to the reference, not the object's internal state, which is why mutating a mutableList held by a val is legal. Prefer val by default: it makes code easier to reason about, is friendlier under concurrency and helps the compiler. Use var only when reassignment is genuinely needed. A val property can still have a custom getter that computes a fresh value on each access. For truly immutable objects, also make the underlying data immutable, since val alone does not prevent mutation through other references.
Candidate Response Strategy & Interview Tips
- Start with a concise one-sentence summary: Deliver a direct, confident answer first before expanding into nuances.
- Demonstrate real-world trade-offs: Discuss where this approach excels and when you would avoid it in production systems.
- Discuss complexity & edge cases: Proactively explain time/space complexity or boundary conditions (null values, scale limits).
- Prepare for interviewer follow-ups: Technical hiring panels frequently probe deeper into concurrency, backward compatibility, or alternative libraries.