Answer
Overview
text
whentext
switchComparison Table
| Feature | Java switch | Kotlin when |
|---|---|---|
| Expression | ❌ Statement only | ✅ Expression + Statement |
| Return Value | ❌ No | ✅ Yes |
| Type Support | Limited | Any type |
| Ranges | ❌ No | ✅ Yes |
| Smart Casts | ❌ No | ✅ Yes |
| Exhaustive | ❌ No | ✅ Optional |
Basic Comparison
Java switch
javaString result; switch (status) { case SUCCESS: result = "Success"; break; case ERROR: result = "Error"; break; default: result = "Unknown"; }
Kotlin when (Expression)
kotlinval result = when (status) { Status.SUCCESS -> "Success" Status.ERROR -> "Error" else -> "Unknown" }
Advanced Features
Ranges
kotlinwhen (score) { in 90..100 -> "A" in 80..89 -> "B" in 70..79 -> "C" else -> "F" }
Type Checks
kotlinwhen (obj) { is String -> println(obj.length) // Smart cast is Int -> println(obj * 2) else -> println("Unknown") }
Multiple Conditions
kotlinwhen (x) { 1, 2, 3 -> println("Small") in 4..10 -> println("Medium") else -> println("Large") }
Without Argument
kotlinwhen { x > 0 -> println("Positive") x < 0 -> println("Negative") else -> println("Zero") }
Sealed Classes
kotlinsealed 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
javaString result = switch (status) { case SUCCESS -> "Success"; case ERROR -> "Error"; default -> "Unknown"; };
Advantage: Kotlin's
is more powerful and type-safe than Java'stextwhen.textswitch