Javaに限らないがプログラミング言語ではequals記号「=」が頻繁に使われる。
数学ではイコールを挟んだ右と左が等しいという意味になるが、プログラミングでは違った意味合いになる。
このページではJavaのイコール記号について簡単にお伝えしよう。
Javaのequals「=」
Javaのequalsという単語の意味は「等しい」である。しかし、Javaのequalsは、「==」とは違う働きをもっている。
「equals」はオブジェクトのメソッドだが,「==」は演算子のひとつ等価演算子である。数値の大きさを比較する演算子「<, >, >=. <=」などの仲間である。
例として,equalsメソッドを持つ文字列オブジェクトで考えてみよう。どちらも文字列ABCを値として持つstring1とstring2であるが,このオブジェクトを(string1 == string2)で比較した結果と(string1.equals(string2))で比較した結果は同じになるだろうか。
1 2 3 4 |
String string1 = new String("ABC"); String string2 = new String("ABC"); if (string1 == string2) { } if (string1.equals(string2)) { } |
結果は,同じにならない。「equals」の比較結果は真(true)であるが,「==」の比較結果は偽(false)である。
なぜかというと「equals」が文字列の値を比較するのに対して,「==」は,オブジェクトの場所を示す変数の値を比較しているからである。
参照変数とオブジェクト
基本的なことだが,「equals」についての説明を理解するために参照変数とオブジェクトの違いが分かっている必要がある。
オブジェクトがどのように作られるかを思い出して欲しい。最初に(①)オブジェクトの参照変数が定義される。次に(②)オブジェクトがnewによって作り出される。そして,(③)オブジェクトの場所が参照変数に代入されるのだ。この参照変数が示す場所のオブジェクトがequalsというメソッドを持っている。
では,実際にサンプルプログラムを実行して確認しておこう。
サンプルプログラム
このプログラムは,説明で使ったコードを実際に実行したものである。それぞれの比較結果は違っている。
1 2 3 4 5 6 7 8 9 10 11 12 |
public class EqualsMethodAndOperator { public static void main(String[] args) { String string1 = new String("ABC");//[1] String string2 = new String("ABC");//[2] if (string1 == string2) {//[3] System.out.println("[4] =="); } if (string1.equals(string2)) {//[5] System.out.println("[6] equals"); } } } |
実行結果
1 |
[6] equals |
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [1] 参照変数string1を宣言し、文字列ABCを値として生成する。
- [2] 参照変数string2を宣言し、文字列ABCを値として生成する。
- [3][4]もしstring1 == string2ならば、”==”を表示する。
- [5][6]もしequals(string2)ならば、”equals”を表示する。
まとめ
このページではJavaのequals「=」記号についてお伝えしてきた。参考にしていただければ幸いだ。