バナー画像

Javaでは「==」演算子が利用出来ることもあり、初心者プログラマーの方や他のプログラミング言語をメインに利用している方には「equals」メソッドとの区別がいまいち理解出来ていない方もいらっしゃるかと思います。

しかし、「==」演算子と「equals」メソッドの違いを理解せず実装を進めていると思わぬバグを作り出してしまう原因となり得ます。

そこで本記事では、「equals」メソッドの基本的な使い方と「==」演算子との違いについて、サンプルコードで確認しながらご紹介していきたいと思います。

Javaのequalsメソッドとは

JavaのStringクラスより提供されている「equals」メソッドは文字列を比較するために利用されます。

比較対象の文字列が同じ場合は「True」が返却され、異なる場合は「False」が返却されます。

ポテパンダの一言メモ

これだけの説明だと簡単なのですが、Javaで「equals」メソッドを利用する場合、もう少し深いところまで理解しておく必要があります。

「同一」と「同値」のはっきりとした区別がJavaのequalsメソッドでは行われる

equalsメソッドで良く見かける説明として2つの文字列が「同じ」であるという内容が挙げられます。

この表現がJavaのequalsメソッドを利用する上で、初心者が混乱してしまう原因の1つとなっています。

Javaでは一見「同じ」文字列でも「同一」の文字列と「同値」の文字列で比較結果が異なります。

Javaにおける「同一」とはインスタンスが同じことを意味しており、つまり「参照先が同じ」ことを指します。

「同値」についてはインスタンスが異なる場合でも文字列が同じ場合、「同値」の値と判断されます。

equalsメソッドでもObject型とString型の2通りが存在する

JavaでequalsメソッドというとまずStringクラスより提供されているメソッドをイメージする方が多いかと思います。

Stringクラスのequalsメソッドは頻繁に起こるエラーの原因として、「null」との比較を行なった際にnullPointerExceptionが発生する問題があります。

そこでJavaではjava.util.Objectsクラスにもequalsメソッドを追加し、Objectsクラスのequalsメソッドを利用することでnullPointerExceptionを回避出来る手段が追加されました。

Java equalsメソッドの基本的な使い方

まず基本となるStringクラスでのequalsメソッドの記述方法についてご紹介していきます。

Stringクラスequalメソッドの基本構文

string1.equals(string2)

上記のコードが最も基本的なequalsメソッドの利用方法となります。

string1に該当する文字列とstring2に該当する文字列を比較した結果を返却します。

実際のコードで確認してみよう。

ではequlsメソッドを利用した実際のコードで実行結果を確認していきたいと思います。

まず通常の文字列比較を行なってみます。

import java.util.*;

public class Main {
public static void main(String[] args) throws Exception {
String str1 = "あいうえお";
String str2 = "あいうえお";

System.out.println(str1.equals(str2));
}
}

最も基本となるパターンで結果は「true」が返却されます。

true

ここでstr1を「null」として指定して実行してみましょう。

import java.util.*;

public class Main {
public static void main(String[] args) throws Exception {
String str1 = null;
String str2 = "あいうえお";

System.out.println(str1.equals(str2));
}
}

Stringクラスのequalsメソッドでは比較元の文字列に「null」を指定した場合NullPointerExceptionが発生してしまいます。

Exception in thread "main" java.lang.NullPointerException
	at Main.main(Main.java:8)

NullPointerExceptionを避けてequalsメソッドを利用したい場合には上記でご紹介したように、Objectsメソッドのequalsメソッドで下記のように記述することが可能です。

import java.util.*;

public class Main {
public static void main(String[] args) throws Exception {
String str1 = null;
String str2 = "あいうえお";

System.out.println(Objects.equals(str1, str2));
}
}

Objectsクラスのequalsメソッドを使用した場合の結果は「false」が返却され、NullPointerExceptionを回避出来ていることが確認出来ます。

false

Javaにおけるequalsメソッドと「==」演算子の違いを理解しよう

様々なプログラミング言語で比較の際に利用される演算子といえば「==」ですが、Javaにおいてequalsメソッドとどういった点が異なるのか確認していきたいと思います。

「==」演算子で比較されるのは「同一」の値

同じ文字列をStringクラスのオブジェクトとしてインスタンス化し、「==」演算子で比較した結果を検証してみます。

import java.util.*;

public class Main {
public static void main(String[] args) throws Exception {
String str1 = new String("123");
String str2 = new String("123");

System.out.println(str1 == str2);
}
}

一見すると同じ「123」という値が設定されているため、答えは「true」となりそうですが結果は下記の通りとなります。

false

この結果は「==」演算子が比較しているのが「同一」の値であり「同値」の値ではない点にあります。

equalsメソッドでは「同値」の値が比較されるため結果が異なる

import java.util.*;

public class Main {
public static void main(String[] args) throws Exception {
String str1 = new String("123");
String str2 = new String("123");

System.out.println(str1.equals(str2));
}
}

上記のサンプルコードを比較部分のみequalsメソッドに変更した結果が下記となります。

ture

equalsメソッドではインスタンスの同一ではなく、設定された値の「123」が比較されるため結果は「true」が返却されています。

さいごに

本記事では、Javaのequalsメソッドについて基本的な概念と使い方をご紹介してきました。

Java以外のプログラミング言語を中心に活動されているプログラマーの方が特に起こしやすいミスが、今回ご紹介した「equlsメソッド」と「==」演算子の使い分けとなっています。

ぜひ本記事の情報を記憶に留めて頂き、Javaでコードを実装する際に思わぬバグを生まないよう注意しておきましょう。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。