Java と C# の switch ステートメントの違いは何ですか?

Jan 22, 2026

伝言を残す

ちょっと、そこ!私はスイッチサプライヤーとして、産業界のあらゆる種類のスイッチを扱ってきました。しかし、今日は少しギアを変えて、別のこと、つまり Java と C# の switch ステートメントの違いについて話します。私のいつもの操舵室とは少し違うように思えるかもしれませんが、信じてください。これらのプログラミング概念を理解すると、実際にさまざまなシステムがどのように動作するかについてより良い視点が得られ、スイッチ ビジネスでは非常に役立ちます。

基本から始めましょう。 Java と C# の switch ステートメントは、式の値に基づいて実行する多くのコード ブロックの中から 1 つを選択できるようにする制御フロー ステートメントです。それは道路における複数の方向に分かれているようなものです。どの値を扱っているかに応じて、異なる道をたどります。

構文と構造

Java では、switch ステートメントの基本構文は次のようになります。

6GK5008-0BA10-1AB2 Electrical Switch XB0086GK5008-0BA10-1AB2 Electrical Switch

switch(expression) { case value1: // 式 == value1 の場合に実行されるコード Break; case value2: // 式 == value2 の場合に実行されるコード Break;デフォルト: // 式がどのケースにも一致しない場合に実行されるコード }

表現タイプの可能性がありますバイト短いチャー整数列挙型種類、(Java 7 以降)、および次のようないくつかのラッパー クラスバイト短いキャラクター、 そして整数。それぞれ場合の後に特定の値が続きます。壊すステートメントは、一致が見つかったときに switch ブロックを終了するために使用されます。忘れてしまった場合は、壊す場合、実行は次のケースに「フォールスルー」され、予期しない動作が発生する可能性があります。

C# の構文は非常に似ています。

switch(expression) { case value1: // 式 == value1 の場合に実行されるコード Break; case value2: // 式 == value2 の場合に実行されるコード Break;デフォルト: // 式がどのケースにも一致しない場合に実行されるコード }

ただし、表現C# では次の型にすることができます交換バイト短いウーショート整数単位長さチャー列挙型型、およびこれらの値型の null 許容バージョン。これは Java に比べて範囲が広いため、さまざまなデータ型を扱う際の柔軟性が高まります。

フォール - スルー行動

前に述べたように、Java には、壊す声明。例えば:

int num = 1; switch(num) { ケース 1: System.out.println("ケース 1");ケース 2: System.out.println("ケース 2");壊す;デフォルト: System.out.println("デフォルトのケース"); }

このコードでは、たとえが 1 の場合、「Case 1」と「Case 2」の両方が印刷されます。壊す最初の後場合

一方、C# では、デフォルトではフォールスルーが許可されません。なしでコードを書こうとすると、壊すまたは後藤最後のステートメント場合ブロックすると、コンパイル エラーが発生します。これは、偶発的な落下によるバグを防ぐ安全機能です。ただし、本当に C# でフォールスルーを実装したい場合は、後藤声明。例えば:

int num = 1; switch(num) { ケース 1: Console.WriteLine("ケース 1");ケース 2 に進みます。ケース 2: Console.WriteLine("ケース 2");壊す;デフォルト: Console.WriteLine("デフォルトのケース"); }

パターン マッチング (C# 7.0 以降)

switch ステートメントに関する Java と C# の大きな違いの 1 つは、C# では C# 7.0 から switch ステートメントにパターン マッチングが導入されたことです。パターン マッチングを使用すると、単純な値だけでなく、より複雑な条件でもマッチングできます。

たとえば、次のような型パターンを使用できます。

オブジェクト obj = "こんにちは"; switch(obj) { case string s: Console.WriteLine($"文字列です: {s}");壊す; case int i: Console.WriteLine($"整数です: {i}");壊す;デフォルト: Console.WriteLine("それは別のものです"); }

新しいバージョンの C# では、定数パターンとリレーショナル パターンを使用することもできます。 Java には、switch ステートメントにこの種の高度なパターン マッチング機能がまだありません。

パフォーマンスに関する考慮事項

パフォーマンスの点では、Java と C# はどちらも switch ステートメントを非常に適切に最適化します。 Java では、場合値が連続する整数の場合、コンパイラはテーブルスイッチ適切なアクセスへの一定時間のアクセスを提供する命令場合ブロック。連続しない値の場合は、ルックアップスイッチ対数的な時間計算量を持つ命令。

C# にも同様の最適化があります。コンパイラは連続した値に対してジャンプ テーブルを使用しようとしますが、これは非常に高速です。連続しない値の場合、二分探索アルゴリズムが使用され、これも優れたパフォーマンスを発揮します。

スイッチ ビジネスにおける現実世界のアプリケーション

さて、これらすべてのプログラミングがスイッチのサプライヤーであることにどのように関係しているのか疑問に思われるかもしれません。まあ、考えてみてください。産業オートメーション システムでは、Java または C# で書かれた制御プログラムが存在することがよくあります。これらのプログラムは switch ステートメントを使用して、センサーの読み取り値またはユーザー入力に基づいて決定を行います。

たとえば、を使用している場合、D4A-3101N 汎用リミットスイッチの場合、制御プログラムは switch ステートメントを使用して、スイッチが開いているか閉じているかに基づいて実行するアクションを決定する場合があります。スイッチが閉じていると、モーターが始動する可能性があります。開いているとモーターが停止する可能性があります。

同様に、6GK5008 - 0BA10 - 1AB2 電気スイッチ スカランス XB008ネットワーク関連の制御プログラムで使用される可能性があります。プログラムは switch ステートメントを使用して、通常動作、エラー状態、メンテナンス モードなど、スイッチによって報告されるさまざまなネットワーク状態を処理できます。

そして、D4A - 4501N D4A - 4510N リミットスイッチロボットアーム制御システムの一部である可能性があります。制御プログラムは switch ステートメントを使用して、リミット スイッチによって検出された位置に基づいてロボット アームがどのように移動するかを決定できます。

結論

結論として、Java と C# の switch ステートメントは基本機能の点で多くの類似点を共有していますが、いくつかの重要な違いがあります。 C# は switch 式のデータ型の範囲が広く、デフォルトではフォールスルーが許可されておらず、高度なパターン マッチング機能を備えています。一方、Java のフォールスルー動作はより寛容です。

産業用スイッチの制御プログラムを作成するプログラマであっても、プロジェクトに適切なスイッチを探しているバイヤーであっても、これらの違いを理解することは、より適切な決定を下すのに役立ちます。高品質のスイッチをお探しの場合は、ぜひご相談ください。当社ではお客様のニーズを満たす幅広いスイッチをご用意しており、お客様のアプリケーションに最適なものを見つけるお手伝いをさせていただきます。したがって、ためらわずに連絡して、調達に関する話し合いを始めてください。

参考文献

  • 「Effective Java」ジョシュア・ブロック著
  • 「C# の詳細」Jon Skeet 著

お問い合わせを送る