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曰く、
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
- === の扱いがややっこしいので習得しておいて下さい
===や!==(必ず「!」が先)を使うことで「同じ型であるか」を判定に加えます。
$num = 20;
if ($num === 20){
print "true";
}
javascript
equalメソッドはこちらでも見つかりませんでした。
===においてはjavascriptでもphpと同じく型の変換が自動で行われます。
var old = 20;
if (old === 20){
alert(true);
}
最終更新:2013年12月04日 12:52