C# và Java đều là ngôn ngữ OOP phổ biến, chạy trên máy ảo (CLR vs JVM), nhưng có nhiều khác biệt về cú pháp, tính năng và hệ sinh thái.
| Đặc điểm | C# | Java |
|---|---|---|
| Nạp chồng toán tử (Operator Overloading) | ✅ Hỗ trợ đầy đủ | ❌ Không hỗ trợ |
| Delegate / Event | ✅ Delegate, Event, Lambda, Func/Action | ❌ Dùng Interface (SAM) + Lambda (Java 8+) |
| Máy ảo | CLR (Common Language Runtime) | JVM (Java Virtual Machine) |
| Biên dịch có điều kiện (Conditional Compilation) | ✅ #if, #define, ConditionalAttribute |
❌ Không có (dùng build system: Maven/Gradle profiles) |
| Câu lệnh goto | ✅ Hỗ trợ (hạn chế dùng) | ❌ Từ khóa dự trữ nhưng không triển khai |
| Struct (Value Type tùy chỉnh) | ✅ struct, record struct |
❌ Chỉ có primitive types là value type (Project Valhalla đang phát triển) |
| Union | ✅ [StructLayout(LayoutKind.Explicit)] |
❌ Không có |
| Property (Getter/Setter) | ✅ Cú pháp ngôn ngữ prop { get; set; } |
❌ Convention: getX()/setX() (record Java 16+ có record) |
| Async/Await | ✅ Từ C# 5.0 (Task/ValueTask) | ✅ Từ Java 21 (Virtual Threads), CompletableFuture trước đó |
| LINQ | ✅ Ngôn ngữ tích hợp (query syntax + method syntax) | ❌ Dùng Stream API (method chaining) |
| Nullable Reference Types | ✅ C# 8+ (#nullable enable, string?) |
❌ Optional<T>, annotation @Nullable (không enforce compile-time) |
| Pattern Matching | ✅ Rất mạnh (switch expression, property pattern, list pattern...) | ✅ Java 16+ (pattern matching for instanceof, switch, record pattern) |
| Cross-platform | ✅ .NET 6+ (Windows, Linux, macOS, ARM, WASM, iOS, Android) | ✅ JVM (rất thành숙, mọi nền tảng) |
| Generic | Reified generics (kiểu T biết tại runtime) | Type erasure (kiểu T bị xóa tại runtime) |
| Value Type Generic | ✅ List<int> không boxing |
❌ List<Integer> boxing (Valhalla sẽ sửa) |
Tóm tắt triết lý
- C#: Ngôn ngữ "feature-rich", tiến hóa nhanh, tích hợp chặt chẽ Visual Studio/.NET, phù hợp enterprise, game (Unity), web (ASP.NET Core), mobile (MAUI).
- Java: "Write once, run anywhere", ổn định, hệ sinh thái khổng lồ (Spring, Android), backward compatibility cực mạnh, phù hợp big data, banking, large-scale systems.
Lưu ý: Cả hai đang hội tụ về tính năng (pattern matching, records, async). Lựa chọn thường phụ thuộc vào stack công ty, team, yêu cầu dự án.