概要
プログラムでは文字や数値の比較を行うことがあるかと思います。そこで今回は比較方法について言語ごとの違いや、言語内での違いについて説明をします。
PHPでの比較
==と===の違い
- == 値が等しい時にtrue
- === 値と型が等しい時にtrue
コード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php $a = 5; $b = "5"; $c = 5; if($a === $b){ echo("変数aとbは値と型が等しいです。<br/>"); }elseif($a == $b){ echo("変数aとbは値のみ等しいです。<br/>"); } if($a === $c){ echo("変数aとcは値と型が等しいです。<br/>"); }elseif($a == $c){ echo("変数aとcは値のみ等しいです。<br/>"); } ?> |
実行結果
変数aは数値、変数bは文字列として扱われているので===での比較の場合はfalse、==での比較の場合はtrueになります。
変数aとcは数値として扱われているので===と==のどちらの比較でもtrueになります。
JAVAでの比較
==とequalsメソッドの違い
- == 同じオブジェクトの時にtrue
- equals 同じ文字列の時にtrue
コード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
public class Sample { public static void main(String[] args) { String str1 = new String("test"); String str2 = new String("test"); String str3 = "test"; String str4 = "test"; if(str1 == str2){ System.out.println("変数str1と変数str2は等しいです。"); }else{ System.out.println("変数str1と変数str2は等しくないです。"); } if(str1.equals(str2)){ System.out.println("変数str1と変数str2は等しいです。"); }else{ System.out.println("変数str1と変数str2は等しくないです。"); } if(str3 == str4){ System.out.println("変数str3と変数str4は等しいです。"); }else{ System.out.println("変数str3と変数str4は等しくないです。"); } if(str3.equals(str4)){ System.out.println("変数str3と変数str4は等しいです。"); }else{ System.out.println("変数str3と変数str4は等しくないです。"); } } } |
実行結果
1 2 3 4 5 6 7 |
変数str1と変数str2は等しくないです。 変数str1と変数str2は等しいです。 変数str3と変数str4は等しいです。 変数str3と変数str4は等しいです。 |
まず文字列の比較の違いの前にStringオブジェクトの生成方法の違いを確認します。
new 演算子を使用してStringオブジェクトを生成した場合は、その都度新しいオブジェクトが作成されます。new演算子を使用しないでStringオブジェクトを生成した場合はすでにStringオブジェクトが存在すればそれを参照し、なければ新規に生成されます。
str3とstr4は同じオブジェクトを参照しています。
次は==とequalsメソッドとの違いを確認します。
==と同じオブジェクトかどうかを比較します。str3とstr4を比較したときのみtrueになります。
equalsメソッドは同じ文字列かどうかを比較します。str1,str2,str3,str4のどれを比較しても同じ文字列なのでtrueになります。
言語ごとも言語内でも比較方法によって違いがあるので比較をする際は何を比較したいのかを考えて比較方法をどれにするのか検討してみてください。