| Категория | Java | C# (C Sharp) |
|---|---|---|
| Общее позиционирование | Строго типизированный, платформенно-независимый язык под JVM. Стандарт для корпоративных, банковских, Android- и микросервисных систем. | Строго типизированный язык Microsoft для .NET/CLR. Применяется в enterprise, desktop, web (ASP.NET), game-dev (Unity). |
| Разработчик / год | Sun Microsystems (1995), ныне Oracle | Microsoft (2000 г.) |
| Парадигма | Объектно-ориентированная + функциональная (через Stream API) | Объектно-ориентированная + функциональная (LINQ, lambda, async/await, records) |
| Среда выполнения | JVM (Java Virtual Machine) | .NET CLR (Common Language Runtime) |
| Компиляция / запуск | Байткод → JIT/AOT → JVM | IL (Intermediate Language) → JIT/AOT → CLR |
| Типизация | Статическая, строгая | Статическая, строгая |
| Null-безопасность |
Возможен NullPointerException; с Java 8 есть Optional
|
С C# 8 — nullable-reference types (string?, !) — полная null-безопасность при включении
|
| Пример «Hello World» |
public class App { public static void main(String[] a){ System.out.println("Hello"); }}
|
class Program { static void Main(){ Console.WriteLine("Hello"); }}
|
| Платформы | JVM (Linux, Windows, Mac, Android) | .NET 6/7 кроссплатформенный (Linux, Windows, Mac) |
| Типы данных |
Примитивы (int,double,boolean) и объекты
|
Все — объекты; value-types (struct), reference-types (class), nullable (int?)
|
| ООП-модель | Классы, интерфейсы, наследование | Классы, интерфейсы, структуры, records, наследование, множ. интерфейсы |
| Инкапсуляция |
public, private, protected, package-private
|
public, private, protected, internal, protected internal, file
|
| Наследование | Один базовый класс + интерфейсы | Один базовый класс + несколько интерфейсов |
| Интерфейсы / реализация по умолчанию | Только сигнатуры (до Java 8) → default methods (с Java 8) | С C# 8 — default interface methods (аналог Java 8) |
| Абстрактные классы |
abstract class
|
abstract class
|
| Records / Data классы |
record User(String n) (с Java 16)
|
record User(string n); (с C# 9)
|
| Enums |
enum Color { RED, GREEN }
|
enum Color { Red, Green } (+ атрибуты, битовые флаги [Flags])
|
| Свойства / get/set |
Методы getX()/setX()
|
Автосвойства public int Age { get; set; }
|
| Функции / методы |
int sum(int a, int b){ return a+b; }
|
int Sum(int a, int b) => a + b; (стрелочный синтаксис)
|
| Lambda / анонимные функции |
С Java 8: x -> x+1
|
С C# 3: x => x+1
|
| Generics | Type erasure (стирание типов) |
Реальные generic с инвариантностью/ковариантностью (out/in)
|
| Коллекции |
List, Set, Map + Stream API
|
List<T>, Dictionary<K,V> + LINQ (аналог Stream API, но более универсальный)
|
| Функциональные операции |
stream().map().filter().collect()
|
list.Where(...).Select(...).ToList()
|
| Асинхронность |
Thread, Executor, CompletableFuture, Future
|
Встроенные async/await, Task, ValueTask, TPL, Channels
|
| Пример async |
CompletableFuture.supplyAsync(() -> f())
|
async Task Do() { await f(); }
|
| Параллелизм | Многопоточность через Thread и Executor | Task Parallel Library (TPL), Parallel.ForEach, PLINQ |
| Обработка ошибок |
try/catch/finally (checked/unchecked)
|
try/catch/finally (все unchecked), when-фильтры в catch
|
| Pattern matching |
switch (с Java 17 Pattern Matching)
|
Расширенный switch / is pattern matching (C# 7+)
|
| Null-операторы |
Optional.ofNullable(x)
|
?., ??, ??= (аналог Elvis-оператора)
|
| Extension-методы | Нет (только через утилитные классы) |
Да — static class Ext { public static void Log(this T x){...}}
|
| Attributes / Annotations |
@Annotation
|
[Attribute] — более мощная и унифицированная модель
|
| Reflection / Meta | Reflection API | Reflection + Expression Trees (исполняемые AST) |
| LINQ vs Stream | Stream API (Java 8) | LINQ — универсальнее (работает с коллекциями, XML, DB, EF) |
| Работа с БД / ORM | JDBC, JPA, Hibernate, Spring Data | ADO.NET, Entity Framework (Core), Dapper |
| Web-фреймворки | Spring Boot, Micronaut, Quarkus | ASP.NET Core MVC, Minimal API, Blazor (Server/WebAssembly) |
| Desktop / UI | JavaFX, Swing | WPF, WinForms, MAUI (кроссплатформенный UI) |
| Mobile | Android (Java/Kotlin) | Xamarin / MAUI (.NET Mobile) |
| Game-dev | Ограниченно (LWJGL, LibGDX) | Unity (полностью на C#) |
| Dependency Injection | Spring Context, Jakarta EE CDI | Встроенный DI в ASP.NET Core или через Autofac, Ninject |
| Logging | SLF4J, Log4j, Logback | ILogger, Serilog, NLog |
| Test-фреймворки | JUnit 5, TestNG, Mockito | MSTest, xUnit, NUnit, Moq |
| Документация |
Javadoc (/**…*/)
|
XML-комментарии (///) + Sandcastle/Doxygen
|
| Сборка / зависимости | Maven, Gradle | MSBuild, dotnet CLI, NuGet |
| DevTools / IDE | IntelliJ IDEA, Eclipse, VS Code | Visual Studio, Rider, VS Code |
| CI/CD | Jenkins, GitLab CI, Maven Pipeline | Azure DevOps, GitHub Actions, TeamCity |
| Модули / пакеты |
package, module-info.java
|
namespace, assembly, project references
|
| Профилирование / мониторинг | VisualVM, JFR | dotTrace, PerfView, Diagnostic Tools |
| Форматы данных | Jackson, Gson (JSON/XML) | System.Text.Json, Newtonsoft.Json, XML Serializer |
| Сборка и деплой | JAR/WAR, Docker, Kubernetes | DLL/EXE, Docker, Kubernetes, Azure |
| Производительность | Высокая, JIT, GC паузы | Аналогичная — RyuJIT, Server GC, Span для низкоуровневых операций |
| Управление памятью | Автоматический GC |
Автоматический GC (RyuJIT / Server GC), unsafe коды через unsafe
|
| Кроссплатформенность | JVM (любая OS) | .NET Core / . NET 6+ (любая OS) |
| Безопасность | Sandboxing JVM, Security Manager | Code Access Security (устарел), AppContext, Windows ACL |
| Языковые фишки | Checked exceptions, Lambda, Streams |
async/await, LINQ, records, pattern matching, extension methods
|
| Философия | «Write once, run anywhere» | «Power and Productivity with .NET» |
| Типичные области | Enterprise backend, Android, микросервисы | Enterprise web, desktop, игры, кроссплатформенные приложения |
| Крупные проекты | Hadoop, Kafka, Elasticsearch, Android | Stack Overflow, Azure, Unity, Visual Studio Code, GitHub (частично) |
| Преимущества | Зрелость, кроссплатформенность, экосистема Spring | Богатый синтаксис, встроенный async/await, LINQ, интеграция с Windows и Azure |
| Недостатки | Многословие, GC паузы, отсутствие реактивных типов по умолчанию | Сильная зависимость от . NET экосистемы, меньше open-source проектов |
| Философия развития | Консервативная эволюция | Быстрое добавление новых фич, ориентация на разработчиков |
| Категория | Java | C# (C Sharp) |
|---|---|---|
| Общее позиционирование | Строго типизированный, платформенно-независимый язык под JVM. Стандарт для корпоративных, банковских, Android- и микросервисных систем. | Строго типизированный язык Microsoft для .NET/CLR. Применяется в enterprise, desktop, web (ASP.NET), game-dev (Unity). |
| Разработчик / год | Sun Microsystems (1995), ныне Oracle | Microsoft (2000 г.) |
| Парадигма | Объектно-ориентированная + функциональная (через Stream API) | Объектно-ориентированная + функциональная (LINQ, lambda, async/await, records) |
| Среда выполнения | JVM (Java Virtual Machine) | .NET CLR (Common Language Runtime) |
| Компиляция / запуск | Байткод → JIT/AOT → JVM | IL (Intermediate Language) → JIT/AOT → CLR |
| Типизация | Статическая, строгая | Статическая, строгая |
| Null-безопасность |
Возможен NullPointerException; с Java 8 есть Optional
|
С C# 8 — nullable-reference types (string?, !) — полная null-безопасность при включении
|
| Пример «Hello World» |
public class App { public static void main(String[] a){ System.out.println("Hello"); }}
|
class Program { static void Main(){ Console.WriteLine("Hello"); }}
|
| Платформы | JVM (Linux, Windows, Mac, Android) | .NET 6/7 кроссплатформенный (Linux, Windows, Mac) |
| Типы данных |
Примитивы (int,double,boolean) и объекты
|
Все — объекты; value-types (struct), reference-types (class), nullable (int?)
|
| ООП-модель | Классы, интерфейсы, наследование | Классы, интерфейсы, структуры, records, наследование, множ. интерфейсы |
| Инкапсуляция |
public, private, protected, package-private
|
public, private, protected, internal, protected internal, file
|
| Наследование | Один базовый класс + интерфейсы | Один базовый класс + несколько интерфейсов |
| Интерфейсы / реализация по умолчанию | Только сигнатуры (до Java 8) → default methods (с Java 8) | С C# 8 — default interface methods (аналог Java 8) |
| Абстрактные классы |
abstract class
|
abstract class
|
| Records / Data классы |
record User(String n) (с Java 16)
|
record User(string n); (с C# 9)
|
| Enums |
enum Color { RED, GREEN }
|
enum Color { Red, Green } (+ атрибуты, битовые флаги [Flags])
|
| Свойства / get/set |
Методы getX()/setX()
|
Автосвойства public int Age { get; set; }
|
| Функции / методы |
int sum(int a, int b){ return a+b; }
|
int Sum(int a, int b) => a + b; (стрелочный синтаксис)
|
| Lambda / анонимные функции |
С Java 8: x -> x+1
|
С C# 3: x => x+1
|
| Generics | Type erasure (стирание типов) |
Реальные generic с инвариантностью/ковариантностью (out/in)
|
| Коллекции |
List, Set, Map + Stream API
|
List<T>, Dictionary<K,V> + LINQ (аналог Stream API, но более универсальный)
|
| Функциональные операции |
stream().map().filter().collect()
|
list.Where(...).Select(...).ToList()
|
| Асинхронность |
Thread, Executor, CompletableFuture, Future
|
Встроенные async/await, Task, ValueTask, TPL, Channels
|
| Пример async |
CompletableFuture.supplyAsync(() -> f())
|
async Task Do() { await f(); }
|
| Параллелизм | Многопоточность через Thread и Executor | Task Parallel Library (TPL), Parallel.ForEach, PLINQ |
| Обработка ошибок |
try/catch/finally (checked/unchecked)
|
try/catch/finally (все unchecked), when-фильтры в catch
|
| Pattern matching |
switch (с Java 17 Pattern Matching)
|
Расширенный switch / is pattern matching (C# 7+)
|
| Null-операторы |
Optional.ofNullable(x)
|
?., ??, ??= (аналог Elvis-оператора)
|
| Extension-методы | Нет (только через утилитные классы) |
Да — static class Ext { public static void Log(this T x){...}}
|
| Attributes / Annotations |
@Annotation
|
[Attribute] — более мощная и унифицированная модель
|
| Reflection / Meta | Reflection API | Reflection + Expression Trees (исполняемые AST) |
| LINQ vs Stream | Stream API (Java 8) | LINQ — универсальнее (работает с коллекциями, XML, DB, EF) |
| Работа с БД / ORM | JDBC, JPA, Hibernate, Spring Data | ADO.NET, Entity Framework (Core), Dapper |
| Web-фреймворки | Spring Boot, Micronaut, Quarkus | ASP.NET Core MVC, Minimal API, Blazor (Server/WebAssembly) |
| Desktop / UI | JavaFX, Swing | WPF, WinForms, MAUI (кроссплатформенный UI) |
| Mobile | Android (Java/Kotlin) | Xamarin / MAUI (.NET Mobile) |
| Game-dev | Ограниченно (LWJGL, LibGDX) | Unity (полностью на C#) |
| Dependency Injection | Spring Context, Jakarta EE CDI | Встроенный DI в ASP.NET Core или через Autofac, Ninject |
| Logging | SLF4J, Log4j, Logback | ILogger, Serilog, NLog |
| Test-фреймворки | JUnit 5, TestNG, Mockito | MSTest, xUnit, NUnit, Moq |
| Документация |
Javadoc (/**…*/)
|
XML-комментарии (///) + Sandcastle/Doxygen
|
| Сборка / зависимости | Maven, Gradle | MSBuild, dotnet CLI, NuGet |
| DevTools / IDE | IntelliJ IDEA, Eclipse, VS Code | Visual Studio, Rider, VS Code |
| CI/CD | Jenkins, GitLab CI, Maven Pipeline | Azure DevOps, GitHub Actions, TeamCity |
| Модули / пакеты |
package, module-info.java
|
namespace, assembly, project references
|
| Профилирование / мониторинг | VisualVM, JFR | dotTrace, PerfView, Diagnostic Tools |
| Форматы данных | Jackson, Gson (JSON/XML) | System.Text.Json, Newtonsoft.Json, XML Serializer |
| Сборка и деплой | JAR/WAR, Docker, Kubernetes | DLL/EXE, Docker, Kubernetes, Azure |
| Производительность | Высокая, JIT, GC паузы | Аналогичная — RyuJIT, Server GC, Span для низкоуровневых операций |
| Управление памятью | Автоматический GC |
Автоматический GC (RyuJIT / Server GC), unsafe коды через unsafe
|
| Кроссплатформенность | JVM (любая OS) | .NET Core / . NET 6+ (любая OS) |
| Безопасность | Sandboxing JVM, Security Manager | Code Access Security (устарел), AppContext, Windows ACL |
| Языковые фишки | Checked exceptions, Lambda, Streams |
async/await, LINQ, records, pattern matching, extension methods
|
| Философия | «Write once, run anywhere» | «Power and Productivity with .NET» |
| Типичные области | Enterprise backend, Android, микросервисы | Enterprise web, desktop, игры, кроссплатформенные приложения |
| Крупные проекты | Hadoop, Kafka, Elasticsearch, Android | Stack Overflow, Azure, Unity, Visual Studio Code, GitHub (частично) |
| Преимущества | Зрелость, кроссплатформенность, экосистема Spring | Богатый синтаксис, встроенный async/await, LINQ, интеграция с Windows и Azure |
| Недостатки | Многословие, GC паузы, отсутствие реактивных типов по умолчанию | Сильная зависимость от . NET экосистемы, меньше open-source проектов |
| Философия развития | Консервативная эволюция | Быстрое добавление новых фич, ориентация на разработчиков |
// Пример кода
function hello(name) {
console.log(`Hi, ${name}!`);
}
hello("Sergey");