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型の変数のみ。