Properties let you store information inside objects. Using val means the value cannot change, while var means it can change.
When you want to keep some information fixed and not allow changes, like a person's birth date.
When you want to allow updates to information, like a user's current score in a game.
When you want to clearly show which data should stay constant and which can be modified.
When you want to prevent accidental changes to important data by using <code>val</code>.
When you want to create simple data holders with readable and writable properties.
Syntax
Kotlin
class MyClass {
val readOnlyProperty: Type = value // cannot be changedvar readWriteProperty: Type = value // can be changed
}
val means the property is read-only after initialization.
var means the property can be changed anytime.
Examples
name cannot be changed once set, but age can be updated.
Kotlin
class Person {
val name: String = "Alice"var age: Int = 30
}
Accessing a val property just reads it. A var property can be assigned a new value.
Kotlin
val car = Car()
println(car.model) // read-only
car.speed = 100// can change speed
Sample Program
This program shows a book with a fixed title and a pagesRead property that can change. It prints the title and pages read before and after updating.
Kotlin
class Book {
val title: String = "Kotlin Basics"var pagesRead: Int = 0
}
fun main() {
val myBook = Book()
println("Title: ${myBook.title}")
println("Pages read: ${myBook.pagesRead}")
myBook.pagesRead = 50println("Pages read after update: ${myBook.pagesRead}")
// myBook.title = "New Title" // This line would cause an error because title is val
}
OutputSuccess
Important Notes
Trying to change a val property after it is set will cause a compile error.
You can think of val as a constant property and var as a variable property.
Summary
val properties are read-only after initialization.
var properties can be changed anytime.
Use val to protect data from accidental changes.
Practice
(1/5)
1. What is the main difference between val and var properties in Kotlin?
easy
A. val can be changed anytime, var is read-only after initialization.
B. val is read-only after initialization, var can be changed anytime.
C. val and var both can be changed anytime.
D. val and var are exactly the same.
Solution
Step 1: Understand val behavior
val properties are assigned once and cannot be reassigned later.
Step 2: Understand var behavior
var properties can be reassigned multiple times after initialization.
Final Answer:
val is read-only after initialization, var can be changed anytime. -> Option B
Quick Check:
val = read-only, var = mutable [OK]
Hint: Remember: val = fixed, var = variable [OK]
Common Mistakes:
Confusing val as mutable
Thinking var is read-only
Believing val and var behave the same
2. Which of the following is the correct way to declare a mutable property named age of type Int in Kotlin?
easy
A. var age: Int = 25
B. val age: Int = 25
C. val age = 25
D. var age: Int
Solution
Step 1: Identify mutable property keyword
Mutable properties use var keyword.
Step 2: Check initialization
Property must be initialized or declared nullable; here age is initialized with 25.
Final Answer:
var age: Int = 25 -> Option A
Quick Check:
Mutable property uses var [OK]
Hint: Use var for changeable properties [OK]
Common Mistakes:
Using val for mutable property
Not initializing non-nullable property
Omitting type without initialization
3. What will be the output of the following Kotlin code?
class Person {
val name = "Anna"
var age = 30
}
fun main() {
val p = Person()
println(p.name)
p.age = 31
println(p.age)
}
medium
A. Anna
30
B. Anna
null
C. Error: Cannot assign to val property
D. Anna
31
Solution
Step 1: Check val name usage
name is a val, so it prints "Anna" and cannot be changed.
Step 2: Check var age reassignment
age is a var, so it can be changed from 30 to 31 before printing.
Final Answer:
Anna
31 -> Option D
Quick Check:
val prints original, var prints updated [OK]
Hint: val prints original, var can be updated [OK]
Common Mistakes:
Expecting error on changing var
Thinking val can be reassigned
Confusing printed values
4. Identify the error in the following Kotlin code:
class Car {
val model: String
var year: Int
init {
model = "Tesla"
year = 2020
}
}
fun main() {
val car = Car()
car.model = "BMW"
println(car.model)
}
medium
A. Cannot assign a new value to val property 'model'.
B. Property 'year' is not initialized.
C. Missing constructor parameters.
D. No error, code runs fine.
Solution
Step 1: Check val model reassignment
model is declared as val, so it cannot be reassigned after initialization.
Step 2: Verify property initialization
model and year are both initialized in init, so no initialization error.
Final Answer:
Cannot assign a new value to val property 'model'. -> Option A
Quick Check:
val properties cannot be reassigned [OK]
Hint: val properties cannot be changed after init [OK]
Common Mistakes:
Trying to reassign val property
Ignoring uninitialized var warnings
Assuming val can be reassigned
5. You want to create a Kotlin class Book where the title should never change after creation, but the price can be updated. Which declaration is correct?
hard
A. class Book(val title: String, val price: Double)
B. class Book(var title: String, var price: Double)
C. class Book(val title: String, var price: Double)
D. class Book(var title: String, val price: Double)
Solution
Step 1: Determine immutability for title
title should not change, so declare it with val.
Step 2: Determine mutability for price
price can change, so declare it with var.
Final Answer:
class Book(val title: String, var price: Double) -> Option C
Quick Check:
Immutable title = val, mutable price = var [OK]
Hint: Use val for fixed, var for changeable properties [OK]
Common Mistakes:
Using var for title which should be fixed
Using val for price which should be changeable
Mixing up val and var keywords
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.