25
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JavaとC#の実践的な比較

Last updated at Posted at 2025-01-02

はじめに

JavaとC#は、企業の基幹システムを支える主力言語として広く採用されているされています。

この2つのプログラミング言語を、実践的な視点から比較してみました。

1. 基本的な言語機能の比較

プロパティの実装

Java

java
public class Person {
    private String name;
    
    // Getter/Setter
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
}

C#

C#
public class Person
{
    // 自動実装プロパティ
    public string Name { get; set; }
    
    // バッキングフィールドを使用する場合
    private string _name;
    public string Name
    {
        get => _name;
        set => _name = value;
    }
}

レコード型の比較

Java

java
public record Person(String name, int age) {
    // コンパクトなイミュータブルなデータ型
    // equals(), hashCode(), toString()が自動生成
}

C#

C#
// イミュータブルなレコード
public record Person(string Name, int Age);

// レコードクラス(ミュータブル)
public record class MutablePerson
{
    public string Name { get; set; }
    public int Age { get; set; }
}

2. 非同期処理の実装

非同期処理の基本

Java(CompletableFuture)

java
public class AsyncService {
    public CompletableFuture<String> fetchDataAsync() {
        return CompletableFuture.supplyAsync(() -> {
            // 非同期処理
            return "データ";
        });
    }
    
    public void handleData() {
        fetchDataAsync()
            .thenAccept(data -> System.out.println(data))
            .exceptionally(error -> {
                System.err.println(error);
                return null;
            });
    }
}

C#(async/await)

C#
public class AsyncService
{
    public async Task<string> FetchDataAsync()
    {
        await Task.Delay(1000); // 非同期処理の模擬
        return "データ";
    }
    
    public async Task HandleDataAsync()
    {
        try
        {
            var data = await FetchDataAsync();
            Console.WriteLine(data);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
        }
    }
}

3. コレクション操作とLINQ vs Stream API

データ処理の比較

Java(Stream API)

java
List<Person> people = getPeople();

var adults = people.stream()
    .filter(p -> p.age() >= 18)
    .map(Person::name)
    .sorted()
    .collect(Collectors.toList());

C#(LINQ)

C#
List<Person> people = GetPeople();

var adults = people
    .Where(p => p.Age >= 18)
    .Select(p => p.Name)
    .OrderBy(name => name)
    .ToList();

4. 最新の言語機能

パターンマッチング

Java

java
Object obj = getValue();
if (obj instanceof String str && !str.isEmpty()) {
    System.out.println(str);
} else if (obj instanceof Integer i && i > 0) {
    System.out.println("正の整数: " + i);
}

C#

C#
object obj = GetValue();
switch (obj)
{
    case string str when !string.IsNullOrEmpty(str):
        Console.WriteLine(str);
        break;
    case int i when i > 0:
        Console.WriteLine($"正の整数: {i}");
        break;
}

// C# 12のリスト型パターン
int[] numbers = [1, 2, 3];
if (numbers is [var first, _, var last])
{
    Console.WriteLine($"First: {first}, Last: {last}");
}

5. エコシステムの比較

ビルドツール

  • Java: Maven, Gradle
  • C#: MSBuild (Visual Studio), .NET CLI

主要フレームワーク

  • Java: Spring Boot, Jakarta EE
  • C#: .NET Core, ASP.NET Core

パッケージ管理

  • Java: Maven Central, JCenter
  • C#: NuGet

6. パフォーマンスとメモリ管理

ガベージコレクション

  • Java: G1GC, ZGC, Shenandoah
  • C#: マーク・アンド・スイープ(世代別GC)

値型の扱い

Java

java
// プリミティブ型とラッパー型が分かれている
int number = 42;        // スタック上
Integer boxed = 42;     // ヒープ上

C#

C#
// 統一された型システム
int number = 42;        // スタック上
object boxed = 42;      // ボックス化されヒープ上
Span<int> numbers = stackalloc int[100]; // スタック上の配列

7. 開発生産性の比較

IDEサポート

  • Java: IntelliJ IDEA, Eclipse, NetBeans
  • C#: Visual Studio, Visual Studio Code, Rider

ホットリロード

  • Java: JRebel, Spring Dev Tools
  • C#: .NET Hot Reload

結論

Javaの長所

  1. プラットフォーム非依存性が高い
  2. エンタープライズでの実績が豊富
  3. オープンソースエコシステムが成熟
  4. 保守的な言語進化による安定性

C#の長所

  1. 言語機能が先進的
  2. Visual Studioの充実した開発環境
  3. Unity等のゲーム開発での強み
  4. Windows環境との親和性

選択の指針

  • エンタープライズシステム:両言語とも適している
  • クロスプラットフォーム:Java
  • Windows特化システム:C#
  • ゲーム開発:C# (Unity)
  • マイクロサービス:両言語とも適している

参考資料

25
15
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?