C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#の==演算子とEquals()メソッドの違いを徹底解説

C#で文字列を比較する方法には、主に「==(等値演算子)」と「Equals()メソッド」の2つがあります。一見するとどちらも同じ結果を返すように見えますが、内部ではまったく異なる動作を行います。この記事では、両者の違いをサンプルコードとともにわかりやすく解説します。

==演算子とEquals()メソッドの基本的な違い

==演算子は比較演算子であり、変数が宣言された型に基づいて比較を行います。特にobject型として扱われる場合は参照の同一性(同じオブジェクトインスタンスを指しているかどうか)を判定します。

一方、Equals()メソッドは文字列の内容そのものを比較します。つまり、Equals()メソッドは中身が同じかどうかだけを判定の対象とします。

例1:string型同士の比較

using System;
namespace ComparisionExample {
    class Program {
        static void Main(string[] args) {
            string str = "hello";
            string str2 = str;
            Console.WriteLine("Using Equality operator: {0}", str == str2);
            Console.WriteLine("Using equals() method: {0}", str.Equals(str2));
            Console.ReadKey();
        }
    }
}

実行結果

Using Equality operator: True
Using equals() method: True

この例では、str2にstrを代入しているため、両者は同じオブジェクトを参照しています。そのため、==演算子とEquals()メソッドのどちらでもTrueが返されます。

例2:object型として宣言した場合の比較

次に、変数をobject型として宣言した場合の挙動を見てみましょう。

using System;
namespace Demo {
    class Program {
        static void Main(string[] args) {
            object str = "hello";
            char[] values = {'h','e','l','l','o'};
            object str2 = new string(values);
            Console.WriteLine("Using Equality operator: {0}", str == str2);
            Console.WriteLine("Using equals() method: {0}", str.Equals(str2));
            Console.ReadKey();
        }
    }
}

実行結果

Using Equality operator: False
Using equals() method: True

この例では、strとstr2はどちらも「hello」という同じ内容を持っていますが、それぞれ別のオブジェクトインスタンスです。変数がobject型として宣言されているため、==演算子は参照の同一性を比較し、結果はFalseになります。

一方、Equals()メソッドはStringクラスでオーバーライドされており、内容ベースの比較を行うためTrueが返されます。

使い分けのポイント

  • 文字列の内容を比較したい場合:Equals()メソッドを使用するのが安全です。
  • 参照(同じインスタンス)が同一かどうかを確認したい場合:==演算子やReferenceEquals()メソッドを使用します。
  • 注意点:string型として明示的に宣言された変数同士の比較では、==演算子はオーバーロードにより内容を比較します。しかし、object型にキャストされたりobject型として宣言されたりすると、参照比較に切り替わるため注意が必要です。

このように、==演算子とEquals()メソッドは似ているようで動作が大きく異なります。特にobject型を扱う場面では意図しない結果を招くことがあるため、文字列の内容比較にはEquals()メソッドを使うことをおすすめします。

  1. GoとJavaの違いを徹底比較!特徴と使い分けのポイント

    プログラミング言語を選ぶ際、「Go」と「Java」のどちらを採用すべきか迷う開発者は少なくありません。どちらもGoogleや企業システムで広く使われる人気言語ですが、設計思想や言語仕様には大きな違いがあります。本記事では、それぞれの言語の特徴を解説したうえで、両者の主な違いを比較表を使ってわかりやすく整理します。 GoとはGoはGoogleが開発した手続き型(プロシージャル)プログラミング言語です。プログラムはパッケージ単位で構成され、シンプルで読みやすいコード記述を重視した設計になっています。動的言語に近い柔軟なパターンを取り入れつつ、静的型付けによる安全性も兼ね備えています。また、軽量スレ

  2. 【初心者向け】Pythonの関数とメソッドの違いを徹底解説!基本構文と実例つき

    関数(Function)とは 関数とは、特定のタスクを実行するためにまとめられたコードブロックです。独自のスコープを持ち、名前を指定して呼び出します。引数は0個でも複数個でもよく、処理の終了時に値を返すことも、返さないことも可能です。 関数の基本構文 def 関数名(引数1, 引数2, ...): # 関数本体 それでは、ごくシンプルな「sum」という関数を作成してみましょう(関数名は自由に付けてかまいません)。この関数は num1 と num2 という2つの引数を受け取り、その合計を返します。sum(5, 6) のように呼び出すと、11 が返されます。 def sum(num1