一致・非一致

Java

  • 数値の一致・非一致
    • ==, != を用いる。
String str = ...; //何らかの入力処理
if (str.length() == 0) { //「文字列長」という数値を評価
  //空欄は警告通知
}
  • 参照の一致・非一致(同一のインスタンスを指しているか)
    • ==, != を用いる。
例文そのうち書きます
  • インスタンスが等価であるかどうかの一致・非一致
    • 異なるインスタンス ( != なインスタンス)でも、等価と見なせるものは、equals メソッドが true を返す。
  • 新しく作られたインスタンスは名前は同じでも全くの別物。
  • オブジェクトについてのよりわかりやすい説明はこちら
boolean b = new Integer(3).equals(new Integer(3)); // true
boolean c = (new Integer(3) == new Integer(3)); // false
    • クラス定義で equals の処理を実装する。
    • 時間があったら Integerクラスのソースを入手して equals メソッドの実装を確認してみてください。
  • 文字列の一致・非一致
    • equals メソッドが true を返す。
    • == での評価は危険である。
boolean b = new String("ABC").equals("ABC"); //true
boolean c = (new String("ABC") == "ABC"); //false
boolean d = ("ABC" == "ABC"); //OracleJavaの場合、true。他の仮想VMでも true。のはず・・・
      • Mくん、何故上記のようになるかは習得済みでしょうか?
  • boolean bの場合はequalsメソッドが等価だと判断するためtrue
  • boolean cの場合はインスタンスは唯一的なものなのでfalse
  • boolean dの場合。==演算子はメモリに持たれている場所を参照するのでABCがただ一つならtrue。
しかし、同じ名前で中身(文字列?)がABCの別のインスタンスが存在した場合異なるインスタンスと判断されfalse。
String string1 = new String("ABC");
String string2 = new String("ABC");
		
boolean e = (string1 == string2);
System.out.println(e); //false
  • もっと解りやすい参照先はこちら
  • 備考
    • equals が true である2者は hashCode() の返り値も == でなければならない ※だったと思う

PHP

equalメソッドは作成すればもちろん使えますが、ライブラリからは見つけることが出来ませんでした。

phpにおける==の扱い

phpでは意図的に型変換を行わないと自動的に先に出現した変数の方に合わせようとするそうです。
それにより文字列'str'が一致を取られるときに、数値'0'として認識されてしまう現象が発生します。
$a = 0;
$b = 'str';
if( $a == $b ) {
	echo 'equal'; //実行結果がequalになってしまう。
} else {
	echo 'not equal';
}
PHP Manual曰く、
整数値を文字列と比較する際、文字列が 数値に変換されます。
PHP: 比較演算子 - Manual
文字列が、 有効な数値データから始まる場合、この値が使用されます。その他の場合、 値は 0 (ゼロ) となります。
PHP: 文字列 - Manual
らしいです。変数が返還される際のルールについてもPHP: 比較演算子 - Manualに記載されています。
確認のため数回試行してみたところ、
a=1; b=1str; //equal
a=1; b=12str; //not equal
a=1.0; b=1str; //equal(1.0strも可)
a=-1300; b=-1.3e3str; //equal
  • === の扱いがややっこしいので習得しておいて下さい
    • Tもイマイチ未修得です
===や!==(必ず「!」が先)を使うことで「同じ型であるか」を判定に加えます。
$num = 20;
if ($num === 20){
  print "true";
}

javascript

equalメソッドはこちらでも見つかりませんでした。
===においてはjavascriptでもphpと同じく型の変換が自動で行われます。
var old = 20;
if (old === 20){
  alert(true);
}
==ではPHPの様な変換ではなく、片方が文字列だった場合文字列に合わせられる様です。
参照:MDN-javascriptリファレンス

タグ:

+ タグ編集
  • タグ:
最終更新:2013年12月04日 12:52