Apexでの文字列比較: equals と == の違いを完全解説

Apexでの文字列比較における equals== の違い

Apexでは、文字列比較において equals メソッドと == 演算子の両方が使用できますが、それぞれの用途や動作に違いがあります。以下に、Apexでの文字列比較に関する重要なポイントを詳しく説明します。


1. == 演算子

  • 目的: 文字列の内容を比較します。
  • 動作: Apexにおいては、== は文字列の内容を比較するようにオーバーロードされています。そのため、通常は == を使用するだけで内容の比較が可能です。
  • :
    String str1 = 'Salesforce';
    String str2 = 'Salesforce';
    System.debug(str1 == str2); // 結果: true
    

2. equals メソッド

  • 目的: equals メソッドも文字列の内容を比較するために使用されます。
  • 動作: 実質的には == と同じ動作をしますが、より明示的に文字列内容を比較していることを表現できます。
  • :
    String str1 = 'Salesforce';
    String str2 = 'Salesforce';
    System.debug(str1.equals(str2)); // 結果: true
    

主要な違いのまとめ

Apexでは、==equals はどちらも文字列の内容を比較するように動作します。ただし、== はコードを簡潔にするためによく使われます。

比較基準 == equals()
目的 文字列の内容を比較 文字列の内容を比較
コードの可読性 簡潔で読みやすい より明示的
推奨される用途 一般的な比較 明示的な比較や標準性が必要な場合

特殊なケース: null の取り扱い

Apexでは、null の比較時に ==equals の動作が異なる場合があります。

  1. == を使用した場合:

    • 両方の値が null の場合、true を返します。
    String str1 = null;
    String str2 = null;
    System.debug(str1 == str2); // 結果: true
    
  2. equals を使用した場合:

    • 呼び出し側の値が null の場合、NullPointerException がスローされます。
    String str1 = null;
    String str2 = 'Salesforce';
    System.debug(str1.equals(str2)); // 実行時にエラー: NullPointerException
    

実践的な使用例

  1. null 安全性を確保した比較:

    String str1 = null;
    String str2 = 'Salesforce';
    Boolean isEqual = (str1 != null && str1.equals(str2));
    System.debug(isEqual); // 結果: false
    
  2. シンプルな比較:

    String str1 = 'Salesforce';
    String str2 = 'Salesforce';
    if (str1 == str2) {
        System.debug('文字列は一致します');
    }
    

結論

  • 一般的な文字列比較には == を使用することを推奨します。
  • equals を使用する場合は、null に注意が必要です。
  • コードの意図を明確にするため、equals を使用する場面を適切に選びましょう。

コメント