代入演算子ってちょっとわかりにくいですよね・・
package jibunyou;
public class S3_7dainyu_enzanshi {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
/*
* =は代入演算子です。
* 何かの値を変数に代入する演算子なので、=の左側は必ず変数になります。
*/
int val = 5; //valに5を代入
val = val + 10; //ここで、=の右側のvalは5.つまりvalに5+10を再代入している。
System.out.println("val=" + val);
/*
* 複合代入演算子
* 再代入を短縮して書くことが出来る。
* a+=b ← a=a+bの短縮
* a-=b ← a=a-bの短縮
* a%=b ← a=a%bの短縮
* のようにすべての演算子で短縮が出来る
*/
/////変数を使うときに初期化をしないとエラーになります。/////
/*
* 例)
int n;
n = n + 10; eclipseを使っている場合、この時点でエラーマークが出てきます。
nにnを入れようとしているので、何の値を入れればいいのかわからないためです。
System.out.println("n="+n);
//mでもおなじです。
int m;
m += 10; (m=m+10の短縮方)
System.out.println("m="+m);
*/
/*
* 複合代入演算子「=」は、本来キャストしなければならないケースでもキャストいなくてもよいという性質があります。
*/
int s = 0;
double x = 15.8;
s += x; //int型のsにdouble型のxを代入しているがエラーになりません
/*
* s=s+xとした場合、右辺がdoubleになるのでs=(int)+(s+x)のようにキャストする必要があります。
* しかし、今回のように+=と複合演算子で計算した場合はキャストする必要がなく、
* 自動的に小数点以下が切捨てられて計算されます。
*/
System.out.println(s); //15と表示される
/*
* 代入演算子=はa=b=cのように多重に書くことも出来ます。
* 複合演算子についても、代入演算子の一種なので多重に書くことが出来ます。
* =は右結合なので右端のcをbに代入することから始まります。
*/
int a,b,c;
c = 5; //cに5を代入
a = b = c; //多重代入、右から順番に代入していく。cをbに代入して、bをaに代入します。
//5 = 5 = 5 になっています。
System.out.print("a=" + a);
System.out.print(" b=" + b);
System.out.println(" c=" + c);
/////複合演算子の多重代入/////
int e =1,f=2,g=3;
e+=f+=g;
/*
* 複合代入演算子は右結合(右から順番に計算)なので、最初に右端のfとgを演算します。
* f+=g (f = f+gの略) この結果gの値は変わらないですが、fは3+2で5になります。
* その次にe+=f (e = e+f)が演算されますので、eは5+1で6になります。
*/
System.out.println(e + "\t" + f +"\t" + g);
/////代入式では、左辺は変数でなければなりません。/////
//a += (b+c) += c では(b+c)は式であって変数ではないのでエラーになります。
}
}