0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Java】インクリメントとデクリメントの挙動

Posted at

はじめに

インクリメントとデクリメントの挙動について、ちゃんと理解できていなかったので、備忘録として残しておく。

答えはいくつ?

みなさん、特に私のような初学者の方は下記のコードの実行結果がぱっと思い浮かびますか?
(私はダメでした…)

Sample.java
public class Sample {

    public static void main(String args[]) {
        
        int a = 10;
        int result = a++ - a + a++ + a-- + --a - a++;
        System.out.println(result);

    }
}

そもそもこんなわかりづらいコードに遭遇することはないと思いますが、
インクリメントとデクリメントが他の演算子と組み合わせて使われていた場合の挙動は理解しておく必要があるかと思います。

インクリメント演算子「++」、デクリメント演算子「—」

変数に1加算したり、減算したりするための演算子。

前置インクリメントと後置インクリメント

インクリメント演算子には、前置と後置があります。

int a = 10;
a++ // a = 10 + 1と同じ
++a // a = 11 + 1と同じ

単体で使う分には何も問題ありません。

しかし、下記のように他の演算子と組み合わせて使用すると…

int a = 10;        
int b = a++; //10
int c = ++a; //12

挙動が異なりました。
前置すると「aに1を加算してから代入」をし、後置すると「代入してからaに1を加算」しています。

これだけなんですけど、理解せずに使うと予期しない動作につながりますよね。

(Swiftでは、たしか紛らわしくて廃止されてたと思いますし、参考書にも他の演算子使わないほうが良いと記載されていた気がします。)

冒頭のコードの出力結果

ここまでの内容を踏まえて、冒頭の答え合わせ。

Sample.java
public class Sample {

    public static void main(String args[]) {
        
        int a = 10;
        
        int result = a++ - a + a++ + a-- + --a - a++; //10 - 11 + 11 + 12 + 10 - 10
        
        System.out.println(result); //22
    }
}

さいごに

インクリメントの挙動について復習、まとめてみました。
誰かのお役に立てれば幸いです。

参考書籍

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?