Java の switch ステートメントはオブジェクトの配列を処理できますか?

Nov 19, 2025

伝言を残す

ちょっと、そこ!スイッチのサプライヤーとして、私は長年にわたってスイッチの世界に深く関わってきました。今日は、非常に興味深いトピックについて掘り下げたいと思います。Java の switch ステートメントはオブジェクトの配列を処理できますか?

基本から始めましょう。 Java にあまり詳しくない人のために説明すると、switch ステートメントは、値のリストに対して変数が等しいかどうかをテストできるようにする制御フロー ステートメントです。これは、単一の変数に基づいてさまざまなケースを処理する必要がある場合に便利なツールです。しかし、オブジェクトの配列となると、状況は少し複雑になります。

Java では、switch ステートメントは特定の型でのみ機能します。これらには、int、byte、short、char などのプリミティブ型と、それらに対応するラッパー クラス (Integer、Byte、Short、Character) が含まれます。 Java 7 以降の String 型と enum 型もサポートします。残念ながら、オブジェクトの配列はこのリストには含まれていません。

この制限の背後にある理由は、switch ステートメントが内部でどのように実装されるかにあります。 Java は switch ステートメントを一連の比較演算にコンパイルします。プリミティブ型と文字列の場合、これらの比較は簡単です。しかし、オブジェクトの配列の場合、それはそれほど単純ではありません。オブジェクトの配列はさまざまなオブジェクトをいくつでも保持できますが、配列の比較は単一の値を比較するほど簡単ではありません。 Java では配列は内容ではなく参照によって比較されるため、「このオブジェクトの配列がそのオブジェクトの配列と等しいかどうか」を単純に言うことはできません。

例を挙げてみましょう。カスタム オブジェクトの配列があるとします。オブジェクト。それぞれオブジェクトには名前、年齢、その他のプロパティがあります。 switch ステートメントを使用して、さまざまな配列を処理できると考えるかもしれません。オブジェクト。しかし、次のようなことをしようとすると:

人[] personArray1 = {新しい人("アリス", 25), 新しい人("ボブ", 30)};人[] personArray2 = {新しい人("チャーリー", 35), 新しい人("デビッド", 40)}; // これは機能しません switch (personArray1) { case personArray2: System.out.println("配列は等しい");壊す;デフォルト: System.out.println("配列が等しくない"); }

Java コンパイラはエラーをスローします。 switch ステートメントでオブジェクトの配列を処理する方法がわかりません。

では、switch ステートメントと同様の方法でオブジェクトのさまざまな配列を処理する必要がある場合は、どうすればよいでしょうか? if - else if チェーンを使用できます。 if - else if を使用して上記の例を書き直す方法は次のとおりです。

人[] personArray1 = {新しい人("アリス", 25), 新しい人("ボブ", 30)};人[] personArray2 = {新しい人("チャーリー", 35), 新しい人("デビッド", 40)}; if (Arrays.equals(personArray1, personArray2)) { System.out.println("配列は等しい"); } else { System.out.println("配列が等しくない"); }

Arrays.equals()このメソッドは 2 つの配列の内容を比較します。これは、オブジェクトの配列を扱うときに本当に必要なことです。

ここで、現実世界のスイッチについて少し話しましょう。私はスイッチサプライヤーとして、日々あらゆる種類のスイッチを扱っています。たとえば、D4A-3101N 汎用リミットスイッチ。これは、汎用アプリケーションに最適なスイッチです。信頼性が高く、さまざまな状況に対応できます。小規模な DIY プロジェクトに取り組んでいる場合でも、大規模な産業用途に取り組んでいる場合でも、このスイッチは便利です。

当社のカタログでもう 1 つの人気のあるスイッチは、151166285 AZM161SK - 12/12RKA - 024 安全スイッチ。安全スイッチは多くの産業現場で重要です。一定の条件が満たされると電源を遮断し、事故の防止に役立ちます。この特定のスイッチは、最大限の安全性を確保するために、高品質の素材と高度な技術を使用して設計されています。

そして、Z - 15GQ - B Q8 Q21 Q22 基本スイッチ。これはシンプルですが効果的なスイッチです。信頼性の高いオン/オフ機能だけが必要な基本的な電気回路に最適です。

Java に戻ります。 switch ステートメントはオブジェクトの配列を直接処理できませんが、回避策はあります。別のアプローチの 1 つは、マップを使用することです。キーがオブジェクトの配列の一意の識別子であり、値が実行するアクションであるマップを作成できます。

java.util.HashMapをインポートします。 java.util.Mapをインポートします。 class ArrayHandler { public static void main(String[] args) { Person[] personArray1 = {new Person("Alice", 25), new Person("Bob", 30)};人[] personArray2 = {新しい人("チャーリー", 35), 新しい人("デビッド", 40)}; Map<String, Runnable> actionMap = new HashMap<>(); actionMap.put("配列 1", () -> System.out.println("配列 1 の処理")); actionMap.put("配列 2", () -> System.out.println("配列 2 の処理")); // 配列の一意の識別子を取得する方法があると仮定します。 String arrayIdentifier = getArrayIdentifier(personArray1); if (actionMap.containsKey(arrayIdentifier)) { actionMap.get(arrayIdentifier).run(); } else { System.out.println("この配列にはアクションが定義されていません"); } } private static String getArrayIdentifier(person[] array) { // これは単純な例ですが、実際には、より複雑なロジックが必要になる場合があります return array.length + "-" + array[0].getName(); } } class Person {プライベート文字列名;プライベートの年齢。 public Person(String name, int age) { this.name = 名前; this.age = 年齢; public String getName() { 名前を返します。 } }

この例では、マップを使用して一意の識別子をアクションに関連付けています。これは単純な switch ステートメントよりもコードが少し多くなりますが、オブジェクトの配列を柔軟に処理できるようになります。

151166285 Safety SwitchZ-15GQ-B Q8 Q21 Q22 Basic Switch

要約すると、Java の switch ステートメントは、実装上の制限によりオブジェクトの配列を処理できません。ただし、同様の機能を実現する他の方法もありますので、ご心配なく。

高品質スイッチの市場にいる場合は、D4A-3101N 汎用リミットスイッチ151166285 AZM161SK - 12/12RKA - 024 安全スイッチ、またはZ - 15GQ - B Q8 Q21 Q22 基本スイッチ、買取・交渉はお気軽にご相談ください。私たちは最高の製品とサービスを提供するためにここにいます。

参考文献

  • Oracle Java ドキュメント
  • 『Effective Java』Joshua Bloch著

お問い合わせを送る