Kotlin makes variables non-nullable by default to help you avoid errors caused by missing values. This means you must explicitly say if a variable can be null.
When you want to make sure a variable always has a value and never causes a crash.
When you want to write safer code that avoids unexpected null errors.
When you want to clearly show which variables can be empty and which cannot.
When you are working with data that must always be present, like user names or IDs.
Syntax
Kotlin
val name: String = "Alice"val age: Int = 30// To allow null, add a question markval nickname: String? = null
By default, types like String and Int cannot hold null.
To allow a variable to be null, add ? after the type.
Examples
This variable city cannot be null. It must always hold a string.
Kotlin
val city: String = "Paris"
This variable country can be null or hold a string.
Kotlin
val country: String? = null
Integer score cannot be null unless declared with Int?.
Kotlin
var score: Int = 100// score = null // This will cause an error
Here, points can start as null and later hold a number.
Kotlin
var points: Int? = null
points = 50
Sample Program
This program shows a non-nullable name and a nullable nickname. It prints the name and checks if the nickname exists before printing.
Kotlin
fun main() {
val name: String = "Bob"// val nickname: String = null // This line would cause an errorval nickname: String? = nullprintln("Name: $name")
if (nickname != null) {
println("Nickname: $nickname")
} else {
println("No nickname provided")
}
}
OutputSuccess
Important Notes
Trying to assign null to a non-nullable variable causes a compile error.
Use nullable types carefully and check for null before using them.
Kotlin's default non-null helps prevent many common bugs related to missing values.
Summary
Kotlin variables are non-nullable by default to keep your code safe.
Add ? after a type to allow null values.
Always check nullable variables for null before using them.
Practice
(1/5)
1. In Kotlin, what happens if you declare a variable without a ? after its type?
easy
A. The variable cannot hold null values.
B. The variable can hold null values.
C. The variable is automatically initialized to null.
D. The variable must be declared as lateinit.
Solution
Step 1: Understand Kotlin's default type behavior
Kotlin types are non-nullable by default, meaning variables cannot hold null unless specified.
Step 2: Check the effect of missing ?
Without ?, the variable type is non-nullable, so it cannot hold null.
Final Answer:
The variable cannot hold null values. -> Option A
Quick Check:
Non-nullable type = no null allowed [OK]
Hint: No ? means no null allowed [OK]
Common Mistakes:
Thinking variables are nullable by default
Assuming variables initialize to null automatically
Confusing lateinit with nullability
2. Which of the following Kotlin variable declarations is correct to allow null values?
easy
A. val name: String? = null
B. val name: String?
C. val name: String = null
D. val name: String = "null"
Solution
Step 1: Identify nullable type syntax
Adding ? after the type allows the variable to hold null.
Step 2: Check initialization
Nullable variables must be initialized or declared with null explicitly, so val name: String? = null is correct.
Final Answer:
val name: String? = null -> Option A
Quick Check:
Nullable type with ? and initialized to null [OK]
Hint: Use ? and initialize nullable variables [OK]
Common Mistakes:
Declaring nullable without ?
Not initializing nullable variables
Assigning null to non-nullable types
3. What will be the output of this Kotlin code?
fun main() {
val text: String? = null
println(text?.length ?: "No text")
}
medium
A. 0
B. Compilation error
C. null
D. No text
Solution
Step 1: Understand safe call operator usage
The text?.length safely accesses length only if text is not null.
Step 2: Evaluate the Elvis operator
Since text is null, text?.length is null, so the Elvis operator ?: returns "No text".
Final Answer:
No text -> Option D
Quick Check:
Safe call + Elvis operator returns fallback [OK]
Hint: Safe call with Elvis returns fallback if null [OK]
Common Mistakes:
Expecting 0 instead of fallback string
Confusing safe call with normal call
Thinking code causes error due to null
4. Identify the error in this Kotlin code snippet:
fun main() {
val number: Int = null
println(number)
}
medium
A. Variable 'number' is not initialized.
B. Cannot assign null to a non-nullable type Int.
C. Missing semicolon after println statement.
D. Variable 'number' should be declared as var.
Solution
Step 1: Check variable type and assignment
The variable 'number' is declared as non-nullable Int but assigned null, which is not allowed.
Step 2: Understand Kotlin null safety rules
Non-nullable types cannot hold null, so this causes a compilation error.
Final Answer:
Cannot assign null to a non-nullable type Int. -> Option B
Quick Check:
Non-nullable types reject null assignments [OK]
Hint: Non-nullable types cannot be assigned null [OK]
Common Mistakes:
Thinking semicolon is required
Assuming var fixes null assignment
Ignoring Kotlin's null safety
5. You have a nullable variable val input: String?. You want to print its length only if it is not null, otherwise print "Empty input". Which Kotlin code correctly does this?
hard
A. println(input.length ?: "Empty input")
B. println(input!!.length)
C. println(if (input != null) input.length else "Empty input")
D. println(input?.length)
Solution
Step 1: Understand nullable variable usage
Since input can be null, we must check before accessing length.
Step 2: Evaluate each option
println(input.length ?: "Empty input") is invalid because length is Int, not nullable, so Elvis operator on it is wrong. println(if (input != null) input.length else "Empty input") safely checks null and prints length or fallback. println(input!!.length) uses !! which throws exception if null. println(input?.length) prints null if input is null, not the string "Empty input".