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()メソッドを使うことをおすすめします。
-
GoとJavaの違いを徹底比較!特徴と使い分けのポイント
プログラミング言語を選ぶ際、「Go」と「Java」のどちらを採用すべきか迷う開発者は少なくありません。どちらもGoogleや企業システムで広く使われる人気言語ですが、設計思想や言語仕様には大きな違いがあります。本記事では、それぞれの言語の特徴を解説したうえで、両者の主な違いを比較表を使ってわかりやすく整理します。 GoとはGoはGoogleが開発した手続き型(プロシージャル)プログラミング言語です。プログラムはパッケージ単位で構成され、シンプルで読みやすいコード記述を重視した設計になっています。動的言語に近い柔軟なパターンを取り入れつつ、静的型付けによる安全性も兼ね備えています。また、軽量スレ
-
【初心者向け】Pythonの関数とメソッドの違いを徹底解説!基本構文と実例つき
関数(Function)とは 関数とは、特定のタスクを実行するためにまとめられたコードブロックです。独自のスコープを持ち、名前を指定して呼び出します。引数は0個でも複数個でもよく、処理の終了時に値を返すことも、返さないことも可能です。 関数の基本構文 def 関数名(引数1, 引数2, ...): # 関数本体 それでは、ごくシンプルな「sum」という関数を作成してみましょう(関数名は自由に付けてかまいません)。この関数は num1 と num2 という2つの引数を受け取り、その合計を返します。sum(5, 6) のように呼び出すと、11 が返されます。 def sum(num1