Java 10 didn’t look like a “big” release at first glance — but it quietly changed how we write Java every single day.
The most popular feature?
👉 Local Variable Type Inference using the var keyword.
But Java 10 also brought useful tooling, memory improvements, and changes that matter in the real world.
In this article, we’ll go step-by-step:
1️⃣ Why var was introduced
2️⃣ How it works (with examples)
3️⃣ Where you should — and should NOT — use it
4️⃣ Other important Java 10 features developers forget
Let’s dive in 👇
🧠 Why Java Needed var
Before Java 10:
Map<String, List<Integer>> scores = new HashMap<String, List<Integer>>();
Lots of repetition. Verbose. Hard to read.
Java 10 gives us:
var scores = new HashMap<String, List<Integer>>();
Cleaner, but still fully type-safe.
Important:
vardoes NOT make Java dynamically typed.
The type is still determined at compile time.
Basic Usage of var
You can use var for local variables only.
Example:
var name = "Java";
var count = 10;
var list = List.of("A", "B", "C");
The compiler infers:
StringintList<String>
❌ Things You CANNOT Do With var
1️⃣ No uninitialized variables
var x; // ❌ compiler error
2️⃣ No null inference
var value = null; // ❌ cannot infer type
3️⃣ Not allowed for fields or parameters
class Test {
var id = 10; // ❌ not allowed
}
void print(var value) {} // ❌ not allowed
var works only inside methods, blocks, and loops.
🔁 var in Loops
for-each
for (var item : list) {
System.out.println(item);
}
for-loop
for (var i = 0; i < 5; i++) {
System.out.println(i);
}
🎯 When var Makes Code Better
1️⃣ Long generic types
var map = new HashMap<String, List<Integer>>();
2️⃣ Stream pipelines
var result = users.stream()
.filter(u -> u.isActive())
.toList();
3️⃣ Local builders
var sb = new StringBuilder();
Clear. Short. Still strongly typed.
⚠️ When NOT to Use var
❌ When it hurts readability
var x = get(); // what is x?
Prefer:
Customer customer = getCustomer();
❌ When types become confusing
var data = service.process(); // list? map? int? object?
Good rule:
👉 Use var when the type is obvious from context.
🔍 Tip: Hover to See the Type (IDE)
IntelliJ / VS Code / Eclipse:
➡ Hover the mouse over var
The IDE shows the inferred type — so don’t worry about losing clarity.
🏗 Other Java 10 Features Worth Knowing
Even though var got the spotlight, there were more improvements.
🧩 1. Application Class-Data Sharing (Faster Startup)
Java 10 improves JVM startup by sharing class metadata.
Result:
✔ faster startup
✔ lower memory usage
No code change needed — JVM handles it.
📂 2. CopyOf() Collection Methods
Immutable copies made easy:
var list = List.of(1, 2, 3);
var copy = List.copyOf(list);
Guarantees immutability.
🧰 3. Improved Container Awareness (Docker & Kubernetes)
Before Java 10, JVM ignored container memory limits.
Now it respects:
- CPU limits
- memory limits
Huge improvement for:
✔ microservices
✔ Kubernetes
✔ Docker workloads
🛠 4. Garbage Collector Interface
JVM now supports pluggable garbage collectors more easily.
This paved the way for future GCs like ZGC & Shenandoah.
Developer impact? Mostly internal — but important for performance evolution.
🧭 Summary — Why Java 10 Matters
Even though it wasn’t hyped like Java 11 or Java 17, Java 10:
✔ made Java code cleaner (var)
✔ improved performance
✔ prepared JVM for containers & future features
If you ask:
Should I learn Java 10 features in 2026?
Absolutely — because we still use var everywhere today.