Question #379EasyNative Android

Compare Kotlin's when with Java's switch?

#kotlin#java#when#switch

Answer

Overview

text
when
in Kotlin is a powerful replacement for Java's
text
switch
.


Comparison Table

FeatureJava switchKotlin when
Expression❌ Statement only✅ Expression + Statement
Return Value❌ No✅ Yes
Type SupportLimitedAny type
Ranges❌ No✅ Yes
Smart Casts❌ No✅ Yes
Exhaustive❌ No✅ Optional

Basic Comparison

Java switch

java
String result;
switch (status) {
    case SUCCESS:
        result = "Success";
        break;
    case ERROR:
        result = "Error";
        break;
    default:
        result = "Unknown";
}

Kotlin when (Expression)

kotlin
val result = when (status) {
    Status.SUCCESS -> "Success"
    Status.ERROR -> "Error"
    else -> "Unknown"
}

Advanced Features

Ranges

kotlin
when (score) {
    in 90..100 -> "A"
    in 80..89 -> "B"
    in 70..79 -> "C"
    else -> "F"
}

Type Checks

kotlin
when (obj) {
    is String -> println(obj.length) // Smart cast
    is Int -> println(obj * 2)
    else -> println("Unknown")
}

Multiple Conditions

kotlin
when (x) {
    1, 2, 3 -> println("Small")
    in 4..10 -> println("Medium")
    else -> println("Large")
}

Without Argument

kotlin
when {
    x > 0 -> println("Positive")
    x < 0 -> println("Negative")
    else -> println("Zero")
}

Sealed Classes

kotlin
sealed class Result {
    data class Success(val data: String) : Result()
    data class Error(val message: String) : Result()
}

fun handle(result: Result) = when (result) {
    is Result.Success -> result.data
    is Result.Error -> result.message
    // No else needed - exhaustive!
}

Java 14+ Enhanced Switch

java
String result = switch (status) {
    case SUCCESS -> "Success";
    case ERROR -> "Error";
    default -> "Unknown";
};

Advantage: Kotlin's

text
when
is more powerful and type-safe than Java's
text
switch
.