Javaの基礎~代入演算子「=」は「=」ではない!?~ | 素粒子の世界で自由に生きる

素粒子の世界で自由に生きる

iphoneアプリのレビューをしていたんですが・・
だんだんandroidアプリ開発の話になってきました。。
さらに、素粒子の話になってきました笑
自分が読み返したくなるブログ記事を書いております♪
ほぼ自己満ですが、ぜひお楽しみください!

代入演算子ってちょっとわかりにくいですよね・・



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)は式であって変数ではないのでエラーになります。





}

}




人気ブログランキングへ