【Java,Javascript】「==」や「===」について色々調べてみた。【等価演算子】
フーム(@F___u___u___m)です
JavascriptをProgateで学んでいる時に感じたことです。
Javaの==(等しいと同義)は、Javascriptでは===だと。
— フーム (@F___u___u___m) 2018年1月28日
いや〜ややこしい。
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となります。
これを厳密等価演算子といいます。
また上記に記載されていた通り
Javaにおいて、型や値が等しい時の記述は=が2つ
Javascriptでは=が3つになります。
となっていました。
既にお気付きの方もいらっしゃると思いますが
そして文字列の比較の時には
「==」ではなく「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だけでも、同様の記事を見つけることができました。
中には是非を問う記事まで....
おそらく理解不足で
間違っている部分もあるかもしれませんが
この記事を書いて、「==」「===」の違いや
等価演算子のことを少し理解したと思います。
(これからは少しでも、ブログで学んだことを書こう)
*2:最初は厳密等価演算子だと思っていましたが、これはJavascript独特の記述みたいですね。