演算子
Javaではオブジェクトタイプ、すなわちクラスのオブジェクトに対しては、いろんな操作をメソッドというものを使って行います。しかしプリミティブタイプにはクラスがなく、メソッドもないので操作はもっぱら演算子を使って行われます。
ありきたりですが、
int a,b,c; a = 1; b = 2; c = a + b;
このように演算子を使って操作を行います。
演算子で少々間違えてしまう例を挙げてみます。
- Stringオブジェクトに対して関係演算子(==)を使うパターン
以下のif文の判定文で間違いパターンと正解パターンを記述します。文字列連結に+が使えるから、==も使えるんだろうと思ってしまうのです。Cとかいけるんすけどね・・・。
String sa = "unko"; String sb = "aho"; if( sa == sb){ // NGパターン } if( sa.equals(sb) ){ // OKパターン }
Stringクラスのequals()メソッド使わないといけません。このequals()メソッドの返し値も、==の結果と同じくブーリアンタイプになります。
オブジェクトタイプの比較に==演算子を使わない事!!
オブジェクトタイプの変数は、オブジェクトの参照といいます。参照なのでCPU上のメモリ上にあるオブジェクトのアドレス値になります。
同じクラスの二つのオブジェクトに対して「==」と書く比較は、比較する二つのオブジェクトの参照の「数値としての等しさ」になるわけです。二つの違うオブジェクトを同一アドレスには格納できませんので、違う値となり本当に比較したかった結果を得られないわけです。
イコールとなる場合は、二つのオブジェクトは名前が違うが、同じオブジェクトである場合となります。