変数にデータを代入する際には=という演算子を利用します。
代入するための演算子は代入演算子と呼ばれ、=以外にも種類があります。
もくじ
代入演算子の種類
代入演算には、代入のみを行うものと代入前に計算を行うものがあります。
演算子 | 文法 | 同義の演算 | 補足説明 |
---|---|---|---|
= | 変数 = データ ; | – | 最も利用される代入演算 |
+= | 変数 += データ ; | 変数 = 変数 + データ ; | 変数内のデータに被演算子のデータが加算され、変数内のデータとなる |
-= | 変数 -= データ ; | 変数 = 変数 – データ ; | 変数内のデータに被演算子のデータが減算され、変数内のデータとなる |
*= | 変数 *= データ ; | 変数 = 変数 * データ ; | 変数内のデータが被演算子のデータと乗算され、変数内のデータとなる |
/= | 変数 /= データ ; | 変数 = 変数 / データ ; | 変数内のデータが被演算子のデータで除算され、変数内のデータとなる |
%= | 変数 %= データ ; | 変数 = 変数 % データ ; | 変数内のデータと被演算子のデータの割った余りが変数内のデータとなる |
※+=、-=、*=、/=、%=は2つの記号の間にスペースを入れてはいけません
代入演算子のルール
代入演算子は右から左へ代入が行われます。算術演算と同様に型の変換も行われますが、算術演算と違い、被演算子の型によってはエラーとなる場合もあります。
ルールその1
代入するデータ側(右の被演算子)がバイト数の大きい型で、代入される変数側(左の被演算子)がバイト数の小さい型の場合、代入することはできない。
例えば、 int = double のような型の場合、代入時にエラーとなります。代入演算の性質上、左は変数となりますが変数は宣言時に型が決まる為、代入演算時の型は自動的に変換されずエラーとなります。
ルールその2
代入するデータ側(右の被演算子)がバイト数の小さい型で、代入される変数側(左の被演算子)がバイト数が大きい型の場合、代入する側の型が代入される側の型に型変換されて、代入が行われる。
例えば、 double = int のような型の演算では、double = double に型変換されてから代入が行われます。
ルールその3
代入するデータ側(右の被演算子)が整数で、代入される変数側(左の被演算子)が小数の場合、代入する側の型が小数に型変換されて、代入が行われる。
反対に、代入するデータ側が小数で、代入される変数側が整数の場合、バイト数の大小にかかわらずエラーとなります。
例えば、int = double のような型の演算では、コンパイル時に型変換は行われずにエラーとなります。
代入演算 サンプルプログラム
以下のプログラムを「Number06.java」という名前でworkフォルダ内に保存します。
保存が完了したら、コマンドプロンプトを起動し、コンパイルおよび実行を行ってみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class Number06{ public static void main(String[] args){ //型変換は行われない int a = 10; //型変換されて代入される例 double b = 10; double c = 10L; float d = 10L; //エラーとなる記述(自動的に型変換は行われない) int e = 10.5; float f = 10.5; } } |
実行例
Number06.java:12: エラー: 不適合な型: 精度が失われる可能性があるdoubleからintへ
の変換
int e = 10.5;
^
Number06.java:13: エラー: 不適合な型: 精度が失われる可能性があるdoubleからfloat
への変換
float f = 10.5;
^
エラー2個
※実行例はコンパイル時にエラーとなる為、実行はしていません。
算術演算と代入演算
代入演算は演算の優先順位が低い演算です。算術演算と代入演算では算術演算が行われて後に、代入演算が行われます。
以下のような記述では、どのような結果になるでしょうか。考えてみましょう。
No | 演算式 | 結果 |
---|---|---|
① | int a = 10 / 3 ; | |
② | double b = 2 + 2 * 5 / 3 ; | |
③ | byte c = 30 ; byte d = c + c ; |
|
④ | int e = 10 / 3.0 ; | |
答えを表示(結果の列に表示されます) |
代入演算 サンプルプログラム
以下のプログラムを「Number07.java」という名前でworkフォルダ内に保存します。
保存が完了したら、コマンドプロンプトを起動し、コンパイルおよび実行を行ってみましょう。
※このプログラムはコンパイルエラーとなります
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class Number07{ public static void main(String[] args){ int a = 10 / 3 ; double b = 2 + 2 * 5 / 3 ; byte c = 30; byte d = c + c ; int e = 10 / 3.0 ; System.out.println(a); System.out.println(b); System.out.println(c); } } |
実行例
c:\work>javac Number07.java
c:\work>java Number07
3
5.0
30
※実行例はコンパイル前に6行目と7行目をコメント(行頭に//付ける)にし、コンパイルおよび実行しています。
補足説明
int a = 10 / 3 ;
10/3を行いますが、int同士の計算はintの結果となる為、aには3が代入されます。
double b = 2 + 2 * 5 / 3 ;
①まず2と5を乗算し10という結果になります
②①の結果である10と3を除算しますが、int同士となる為、3という結果になります
③2と②の結果である3を加算して5という結果になります
④5をbに代入する際にdouble型に変換されますので、5.0という結果となります
byte c = 30;
byte d = c + c ;
c自体はbyte型ですが、算術演算子を利用すると結果がint型になる為、byte = intの代入演算になります。右の型の方がバイト数が大きい為、数値の大小は関係なくコンパイルエラーとなります。
int e = 10 / 3.0 ;
int / double の演算はdouble型の結果となり、int = doubleの代入演算になります。左の型が整数で右の型が小数となり、コンパイルエラーとなります。
まとめ
- 代入演算は変数内にデータを入れることができる
- 代入演算には算術を行いながら代入を行う演算もある
- 代入演算時は型に気を付ける
- 「バイト数の大きい型の値」を「バイト数の小さい型の変数」へ代入することができない
- 「バイト数の小さい型の値」を「バイト数の大きい型の変数」へ代入すると、大きい型へ型変換が行われ、代入される
- 「整数の型の値」を「小数の型の変数」へ代入すると、小数へ型変換されてから代入される
- 「小数の型の値」を「整数の型の変数」へ代入すると、型変換は行われずエラーとなる
- 算術演算と代入演算が混合する場合は型に注意