Wrapper Classes & Boxing in Java & Kotlin
Primitive data types are fast and memory-efficient, but modern JVM programming often requires objects. Wrapper classes, boxing, and unboxing bridge this gap. This topic is extremely important for interviews, JVM internals, and performance discussions.
Table of Contents
1. Wrapper Classes
Wrapper classes are object representations of primitive data types. They allow primitives to work with collections, generics, and frameworks.
| Primitive | Wrapper (Java) | Kotlin Type | Description |
|---|---|---|---|
| int | Integer | Int | Whole numbers, most commonly boxed type |
| double | Double | Double | Decimal values with double precision |
| boolean | Boolean | Boolean | True/false values for conditions |
| char | Character | Char | Single Unicode character |
📌 In Java, primitives and wrappers are separate types. 📌 In Kotlin, this distinction is hidden but still exists internally.
2. Boxing & Unboxing
Boxing converts a primitive into an object. Unboxing converts the object back to a primitive.
Java Example
// Autoboxing
int a = 10;
Integer boxed = a;
// Unboxing
Integer b = 20;
int value = b;
Java performs boxing at runtime, which may introduce performance overhead.
Kotlin Example
val a: Int = 10
val b: Int? = a // boxed (nullable)
val c: Int = b!! // unboxed
Kotlin enforces null safety, preventing accidental unboxing crashes.
3. Kotlin Internal Handling
Kotlin uses primitive types internally when possible and switches to wrappers only when required.
- Nullable types (
Int?) - Generics (
List<Int>) - Java interoperability
val x: Int = 5 // primitive internally
val y: Int? = null // boxed
val list = listOf(1, 2, 3) // boxed Int objects
This design gives Kotlin a balance of performance and safety.
4. Java & Kotlin – Wrapper Handling
| Aspect | Java | Kotlin |
|---|---|---|
| Primitive vs Wrapper | Explicit | Hidden |
| Null Safety | No | Yes |
| Autoboxing | Runtime | Compiler-controlled |
| Safety | Medium | High |
5. Interview Questions & Answers
Q1. What is autoboxing?
Answer: Automatic conversion between primitive types and wrapper objects.
Q2. Why are wrapper classes slower than primitives?
Answer: They create heap objects and increase garbage collection overhead.
Q3. Does Kotlin remove wrapper classes?
Answer: No. Kotlin still uses them internally when required by the JVM.
Q4. When does Kotlin box primitives?
Answer: When using nullable types, generics, or Java APIs.
6. Conclusion
Wrapper classes are essential for JVM-based object-oriented programming. Java exposes boxing explicitly, while Kotlin provides a safer abstraction without losing performance.
Understanding this topic helps you:
- Write efficient JVM code
- Avoid hidden performance issues
- Answer interview questions confidently
Comments
Post a Comment