Javaマスターへの道 資格勉強編 Part19
最近体調崩しがちな新人エンジニアによる資格勉強はじまります。
今日はシンプルなプログラムなのですが、意外なところに落とし穴があるかもしれないです。
ではさっそく以下のプログラムを実行したとき出力される値はどうなるでしょうか。
1 2 3 4 5 6 7 8 | public class Main { public static void main(String[] args) { int a = 5; int b = a *= 3; System.out.println(a + b); } } |
さてさてとても簡単そうな問題ですが、すぐに答えが出た方はもう一度見直してみるのもいいかもです。
まあ見たらわかるのですが引っ掛けポイントは変数bの宣言のところですね、
ここで変数bと変数aの値がどうなるかといったところですね。
では解答へ行ってみましょう
その前に唐突なのですが、今までの資格勉強編の問題はすべて私自身で動作確認をするために
vsCode上で動かしてからブログに挙げているのですが、
もしかするとブログ上のコードが間違っている時もあるかもしれません。
vsCodeからコピペしてあげてはいますが、ミスで変な文字入ったりするかもなので
皆さんもご自身のpcなどでプログラムを実行して確認することをお勧めします。
自分で動かすことでより一層理解が深まると思いますので。
話が逸れてしまいましたが解答へ戻ります
int b = a *= 3の部分の解説をします
まず=や+や*などの演算子には優先順位があるのは皆さん知っているでしょうか
有名でもありますし、知らなくても足し算より掛け算の方が先に計算することは知っているかたは多いと思います。
今回のプログラムではそこまで大切ではないですが演算子には優先順位があることは覚えておきましょう。
では計算していきましょう、bに入る数字は3か5か15かどれでしょう
答えは15です。
なぜなら右辺で3*5となりその結果の15が代入されるからです。
なので答えはaが5、bが15で足して20に・・・ならないんですね
なぜかというとbの計算をするときにaの値が15に更新されるのです
よって答えは15足す15で30となります。
感覚的にaの値が更新されるのが理解しにくい気持ちが筆者もありましたが、
一時的でもaに代入しているので値が変わるということですね。
今回は意外な落とし穴についての解説でした。
次回をお楽しみに