とりあえず学んだことはアウトプットしておこうと思ってるんですが、知らないにも程があるというか、気付きが多すぎて、こんな基本的なこと書いてて大丈夫か?とはてなマークがくるくる回る日々。いかがお過ごしでしょうか。
そんなこんなで、本日は演算の順番について。算数の計算法則と大部分は変わらないのですが、算数と勝手の違う部分を知ったのでメモしておきます。
文字列の足す(結合)
さっそくですが、下記のプログラムを実行すると、冒頭画像の結果になります。
public class CalcOrder {
public static void main(String[] arrs) {
System.out.println("答えは" + (3 + 2) + "です");
System.out.println("答えは" + 3 + 2 + "です");
}
}
3行目と4行目で何が違うのかというと、「3 + 2」が「()」で括られているかどうかです。
「()」で括ると優先的に計算がおこなわれるので、3行目は、3 + 2 = 5(数字と数字の足し算は普通の計算)になります。
4行目は「()」で括られている部分が無くて、すべて「+」の演算子で構成されています。優先順位の同じ演算子が並んでいる場合は、左から順番に計算がおこなわれるのは算数の計算と同じなので、4行目の計算は、「((“答えは” + 3) + 2) + “です”」という風に表すことができます。
そして、““で囲まれた文字列と一緒に使われる「+」演算子は文字列の結合をおこないます。つまり、“答えは” + 3 = “答えは3”(文字列の結合) となります。これも文字列なので、次の「+」も右側の文字を結合します。これを繰り返して、最終的に"答えは32です"と表示されます。
代入演算子「=」の順序
参考書によると、「=」の場合は右から順番に計算されるそうです。おそらく基本中の基本なんでしょうが、そんなことも知りませんでした。自分でも素人恐るべしと感じてます。
a = b = c = d;
は、
a = (b = (c = d));
として計算されます。
使ってる参考書は、こちら。
コメント
コメントなどありましたら、GitHubのディスカッションへお願いします。(書き込みには、GitHubのアカウントが必要です)