がんばるブログ

プログラミングが苦手です。

【Java,Javascript】「==」や「===」について色々調べてみた。【等価演算子】

フーム(@F___u___u___m)です

 

JavascriptをProgateで学んでいる時に感じたことです。

Javaにおいて、型や値が等しい時の記述は=が2つ

Javascriptでは=が3つになります。

ややこしいよね〜。

本日は、そのことについて詳しく調べてみたいと思います。

 

Javaで「==」、Javascriptで「==」をしたらどうなるのか

最初に敢えて逆のことをやってみます。

 

まずはJavaで「===」を使用します。

System.out.println(1 === "1");

上記のコードを書くと

 illegal start of expression(直訳:違法な表現の開始)

いわゆる不正な式の開始でエラーになりました。

Javaで「===」は認められていないのです...。

 

次にJavascriptで「==」を使用します。

console.log(1 == "1");

先ほども記述していましたが

計算したりできる数値の1と

「""(クォーテーションマーク)」で囲ったことにより*1

文字として出力される文字列となった1です。

同じように見えますが、全然違うのでfalseですが....

Trueとでました!!

 

それもそのはず、Javascriptにおいて「==」は

文字列と数値を比較する際に

文字列が数値に変換されるのです。

このことを等価演算子といいます。

 

そして、Javascriptの「===」は

型を変換することなく、厳密に等しければTrueとなります。

これを厳密等価演算子といいます。

phiary.me

qiita.com

developer.mozilla.org

 

Javaにも等価演算子の記述がある?!

また上記に記載されていた通り

Javaにおいて、型や値が等しい時の記述は=が2つ

Javascriptでは=が3つになります。

となっていました。

既にお気付きの方もいらっしゃると思いますが

Javaの「==」は等価演算子です。*2

eng-entrance.com

 

そして文字列の比較の時には

「==」ではなく「equalsメソッド」で記述します。

下記のコードは

侍エンジニア塾の記事(https://www.sejuku.net/blog/21395#equals)から

拝借したものです。

public class JavaEquals {

    public static void main(String[] args) {

        String hoge = "Hello";

        String fuga = "Hello";

        hoge += "!";

        fuga += "!";     

        if(hoge == fuga) {

            System.out.println("hogeとfugaとは等しい");

        } else {

            System.out.println("hogeとfugaとは違う");

        }

        if(hoge.equals(fuga)) {

            System.out.println("hogeとfugaとは等しい");

        } else {

            System.out.println("hogeとfugaとは違う");

        }

    }   

}

hogeとfugaには「Hello」という文字列が代入されており

どちらも「hogeとfugaとは等しい」となると思いきや....

String hoge = "Hello";

String fuga = "Hello";

と別々に記述されているため

たとえ同じ文字列でも

hoge==fuga」では「hogeとfugaとは違う」となります。

 

単に記述内容が等しいかを調べるためには

hoge.equals(fuga)」と記述するのがいいとのことです。

 

もし利用することがあれば

文字列そのものを調べる時は「equalsメソッド」というふうに

用途を分けていきたいです...。(わけられるかな)

 

まとめ

この記事を作るために、かなりのサイトを回りました。

やはり私と同じように思っている人は多いみたいで

Qiitaだけでも、同様の記事を見つけることができました。

qiita.com

qiita.com

qiita.com

中には是非を問う記事まで....

qiita.com

 

おそらく理解不足で

間違っている部分もあるかもしれませんが

この記事を書いて、「==」「===」の違いや

等価演算子のことを少し理解したと思います。

f:id:fuumsan:20180129124509p:plain

(これからは少しでも、ブログで学んだことを書こう)

 

*1:アポストロフィー('')でも可

*2:最初は厳密等価演算子だと思っていましたが、これはJavascript独特の記述みたいですね。