javaの検定試験 SJC-P対策のメモ
今日からSJC-Pの学習で、特に重要なポイントとなりそうなところを
メモ書き程度に残していこうと思う。
java5.0の演算子について
とりあえずJavaの演算子を列挙してみる
=, +=, -=, +, -, *, /, %, ++, --, <, <=, >, >=, ==, !=, &, |, ^, !, &&, ||, instanceof, ? (true : folse) |
C言語などでもそうだが、計算式に括弧をつければ、演算子の優先順序にかかわらず
一番内側のカッコ内の計算から真っ先に行われる。
var = 5 + 10 * 20; var = (5 + 10) * 20; //括弧をつけて計算順序を変える var = 5 + (10 * 20); //これは括弧をつける意味なし |
代入演算子と複合代入演算は最後に評価される。
var = 10 + 30; //リテラル代入 var += 10 + 30; //間違える人はいないと思うが //これは10+30の結果と変数varの //値を足して、変数varに代入している |
ちなみに、クラス型の変数(参照変数)に代入するものは
クラスの実体への参照であって、インスタンスの実体ではない。
C言語風に言うと、参照変数は常にクラスのポインタを指す事になる。
Foo foo = new Foo(); //Fooへの参照 String str = "JAVA"; //文字列リテラルへの参照 |
Cで書き換えてみる。
struct Foo *foo = (struct Foo*)initFoo(); . . . struct Foo *initFoo(void){ struct Foo *fooVar = (struct Foo*)malloc(sizeof(struct Foo)); return fooVar; //説明のためだけで、エラーチェックは省略 } |
等価演算子についても、Cとほぼ変わりない。
2項で比較を行う変数の型が違う場合でも、
値が同じであれば問題ない。
if(5.0f == 5L) { } //問題なし |
ただしboolean型の変数を等価演算するときは
次のような問題が発生する場合がある。
boolean b = false; //if(b == true) {} // こうするつもりだったが... if(b = true) { } //この式はコンパイルが通る //結果は必ず真となる . . . int x = 0; if(x = 1) {} //これはコンパイルエラー |
boolean以外の変数は,if文の中で代入は
代入後の値に等価演算する必要がある。
値を代入後に、等価演算を行う必要が無いのは、
boolean型の変数のみ。