2020.03.23
Javaプログラミング
インクリメント・デクリメント演算子
インクリメント演算子とは、整数型の変数に1を足す(1増加)もので、半角のプラス'+'を2つ並べた'++'で表します。
デクリメント演算子とは、整数型の変数から1を引く(1減少)もので、半角のマイナス'-'を2つ並べた'--'で表します。
表にまとめると以下のようになります。
演算 | 演算子 | 備考 |
---|---|---|
インクリメント(1足す) | ++ | ++iとi++は、 i=i+1と同じ |
デクリメント(1引く) | -- | --iはi--は、 i=i-1と同じ |
インクリメント演算子とデクリメント演算子は、変数の前に書く方法と、後ろに書く方法の2つがあります。
前に書く方法は「前置」、後ろに書く方法は「後置」と呼ばれます。使い方は以下のとおりです。
// 前置インクリメント
++変数
変数に1を足しています。
// 後置インクリメント
変数++
変数に1を足しています。
// 前置デクリメント
--変数
変数から1を引いています。
// 後置デクリメント
変数--
変数から1を引いています。
インクリメント・デクリメントの利用例
インクリメント・デクリメントは、for文の変化式で利用されます。特にインクリメント「++」が利用されます。
以下は、for文の変化式に「++i」(インクリメント)を使ったソースコードの例です。変数iは0から9まで1ずつ変化していきます。
for ( int i = 0; i < 10; ++i ) {
:
}
for ( int i = 9; i >= 0; --i ) {
:
}
インクリメントのJavaソースコード その1
前置と後置でインクリメントを行うソースコードの例です。
Increment1.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016
public class Increment1 { public static void main( String[] args ) { // 変数定義 int a; // 前置インクリメント a = 0; ++ a; System.out.println( "前置インクリメント a=" + a ); // 後置インクリメント a = 0; a ++; System.out.println( "後置インクリメント a=" + a ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis Increment1.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac Increment1.java
実行
C:\talavax\javasample>java Increment1
Increment1.javaの出力結果
前置インクリメント a=1 後置インクリメント a=1
前置と後置でインクリメントした値がどちらも同じa=1になっています。どちらもa=0に1が足されています。
デクリメントのJavaソースコード その1
前置と後置でデクリメントを行うソースコードの例です。
Decrement1.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016
public class Decrement1 { public static void main( String[] args ) { // 変数定義 int a; // 前置デクリメント a = 0; -- a; System.out.println( "前置デクリメント a=" + a ); // 後置デクリメント a = 0; a --; System.out.println( "後置デクリメント a=" + a ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis Decrement1.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac Decrement1.java
実行
C:\talavax\javasample>java Decrement1
Decrement1.javaの出力結果
前置デクリメント a=-1 後置デクリメント a=-1
前置と後置でデクリメントした値がどちらも同じa=-1になっています。どちらもa=0から1が引かれています。
インクリメントのJavaソースコード その2
前置と後置で違う値になるようにしたソースコードです。
Increment2.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016
public class Increment2 { public static void main( String[] args ) { // 変数定義 int a, b; // 前置インクリメント a = 0; b = ++ a; System.out.println( "前置インクリメント b=" + b ); // 後置インクリメント a = 0; b = a ++; System.out.println( "後置インクリメント b=" + b ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis Increment2.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac Increment2.java
実行
C:\talavax\javasample>java Increment2
Increment2.javaの出力結果
前置インクリメント b=1 後置インクリメント b=0
前置と後置でインクリメントした値が違うことがわかります。
これは、前置の方がaに1を足した値をbに代入しているのに対して、後置の方はaの値をbに代入した後でaに1を足すことによって起こる違いです。
デクリメントのJavaソースコード その2
前置と後置で違う値になるようにしたソースコードです。
Decrement2.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016
public class Decrement2 { public static void main( String[] args ) { // 変数定義 int a, b; // 前置デクリメント a = 0; b = -- a; System.out.println( "前置デクリメント b=" + b ); // 後置デクリメント a = 0; b = a --; System.out.println( "後置デクリメント b=" + b ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis Decrement2.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac Decrement2.java
実行
C:\talavax\javasample>java Decrement2
Decrement2.javaの出力結果
前置デクリメント b=-1 後置デクリメント b=0
前置と後置でデクリメントした値が違うことがわかります。
これは、前置の方がaから1を引いた値をbに代入しているのに対して、後置の方はaの値をbに代入した後でaから1を引くことによって起こる違いです。
インクリメントのJavaソースコード その3
Increment3.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021
public class Increment3 { public static void main( String[] args ) { // 変数定義 int a, b; int n[] = new int[ 3 ]; n[ 0 ] = 2; n[ 1 ] = 9; n[ 2 ] = 8; // 前置インクリメント a = 0; b = n[ ++ a ]; System.out.println( "前置インクリメント b=" + b ); // 後置インクリメント a = 0; b = n[ a ++ ]; System.out.println( "後置インクリメント b=" + b ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis Increment3.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac Increment3.java
実行
C:\talavax\javasample>java Increment3
Increment3.javaの出力結果
前置インクリメント b=9 後置インクリメント b=2
デクリメントのJavaソースコード その3
Decrement3.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021
public class Decrement3 { public static void main( String[] args ) { // 変数定義 int a, b; int n[] = new int[ 3 ]; n[ 0 ] = 2; n[ 1 ] = 9; n[ 2 ] = 8; // 前置デクリメント a = 1; b = n[ -- a ]; System.out.println( "前置デクリメント b=" + b ); // 後置デクリメント a = 1; b = n[ a -- ]; System.out.println( "後置デクリメント b=" + b ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis Decrement3.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac Decrement3.java
実行
C:\talavax\javasample>java Decrement3
Decrement3.javaの出力結果
前置デクリメント b=2 後置デクリメント b=9
前置の方はaから1を引いた値が添え字になります。この例ではa=0が添え字になるのでb=n[0]が代入されます。
後置の方はaが添え字になります。この例ではa=1が添え字になるのでb=n[1]が代入され、代入後にaから1が引かれます。
インクリメントのJavaソースコード その4
Increment4.java
001 002 003 004 005 006 007 008 009 010 011
public class Increment4 { public static void main( String[] args ) { int a, b; a = 1; System.out.println( ++a ); b = 1; System.out.println( b++ ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis Increment4.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac Increment4.java
実行
C:\talavax\javasample>java Increment4
Increment4.javaの出力結果
2 1
printlnメソッドに「++a」を渡すと、aに1を足したa=2の値が出力されます。
aの前の「++」(インクリメント)があるので、aに1を足した後のaの値がprintlnメソッドに渡されるためです。
printlnメソッドに「b++」を渡すと、b=1の値が出力されます。
bの後ろに「++」(インクリメント)があるので、bをprintlnメソッドに渡した後にbに1を足すためです。
デクリメントのJavaソースコード その4
Decrement4.java
001 002 003 004 005 006 007 008 009 010 011
public class Decrement4 { public static void main( String[] args ) { int a, b; a = 1; System.out.println( --a ); b = 1; System.out.println( b-- ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis Decrement4.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac Decrement4.java
実行
C:\talavax\javasample>java Decrement4
Decrement4.javaの出力結果
0 1
printlnメソッドに「--a」を渡すと、aから1を引いたa=0の値が出力されます。
aの前の「--」(デクリメント)があるので、aから1を引いたaの値がprintlnメソッドに渡されるためです。
printlnメソッドに「b--」を渡すと、b=1の値が出力されます。
bの後ろに「--」(デクリメント)があるので、bをprintlnメソッドに渡した後にbから1を引くためです。
インクリメントのJavaソースコード その5
Increment5.java
001 002 003 004 005 006 007 008 009 010 011
public class Increment5 { public static void main( String[] args ) { char c; c = 'A'; ++c; System.out.println( c ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis Increment5.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac Increment5.java
実行
C:\talavax\javasample>java Increment5
Increment5.javaの出力結果
B
char型は1文字を扱う変数ですがインクリメントすることができます。
1つの文字は、文字コードと呼ばれる数字で表されるのでint型/short型のような整数型の変数と同じようにインクリメントが可能です。
デクリメントのJavaソースコード その5
Decrement5.java
001 002 003 004 005 006 007 008 009 010 011
public class Decrement5 { public static void main( String[] args ) { char c; c = 'Z'; --c; System.out.println( c ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis Decrement5.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac Decrement5.java
実行
C:\talavax\javasample>java Decrement5
Decrement5.javaの出力結果
Y
以上です。