Javaの基礎文法 代入演算(2-7)

記事上広告

変数にデータを代入する際には=という演算子を利用します。

代入するための演算子は代入演算子と呼ばれ、=以外にも種類があります。

代入演算子の種類

代入演算には、代入のみを行うものと代入前に計算を行うものがあります。

代入演算の種類と説明
演算子 文法 同義の演算 補足説明
= 変数 = データ ; 最も利用される代入演算
+= 変数 += データ ; 変数 = 変数 + データ ;  変数内のデータに被演算子のデータが加算され、変数内のデータとなる
-= 変数 -= データ ; 変数 = 変数 – データ ;  変数内のデータに被演算子のデータが減算され、変数内のデータとなる
*= 変数 *= データ ; 変数 = 変数 * データ ;  変数内のデータが被演算子のデータと乗算され、変数内のデータとなる
/= 変数 /= データ ; 変数 = 変数 / データ ;  変数内のデータが被演算子のデータで除算され、変数内のデータとなる
%= 変数 %= データ ; 変数 = 変数 % データ ;  変数内のデータと被演算子のデータの割った余りが変数内のデータとなる

※+=、-=、*=、/=、%=は2つの記号の間にスペースを入れてはいけません

代入演算子のルール

代入演算子は右から左へ代入が行われます。算術演算と同様に型の変換も行われますが、算術演算と違い、被演算子の型によってはエラーとなる場合もあります。

ルールその1

代入するデータ側(右の被演算子)がバイト数の大きい型で、代入される変数側(左の被演算子)がバイト数の小さい型の場合、代入することはできない

例えば、 int = double のような型の場合、代入時にエラーとなります。代入演算の性質上、左は変数となりますが変数は宣言時に型が決まる為、代入演算時の型は自動的に変換されずエラーとなります。

ルールその2

代入するデータ側(右の被演算子)がバイト数の小さい型で、代入される変数側(左の被演算子)がバイト数が大きい型の場合、代入する側の型が代入される側の型に型変換されて、代入が行われる

例えば、 double = int のような型の演算では、double = double に型変換されてから代入が行われます。

ルールその3

代入するデータ側(右の被演算子)が整数で、代入される変数側(左の被演算子)が小数の場合、代入する側の型が小数に型変換されて、代入が行われる
反対に、代入するデータ側が小数で、代入される変数側が整数の場合、バイト数の大小にかかわらずエラーとなります。

例えば、int = double のような型の演算では、コンパイル時に型変換は行われずにエラーとなります。

代入演算 サンプルプログラム

以下のプログラムを「Number06.java」という名前でworkフォルダ内に保存します。
保存が完了したら、コマンドプロンプトを起動し、コンパイルおよび実行を行ってみましょう。

実行例

c:\work>javac Number06.java
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フォルダ内に保存します。
保存が完了したら、コマンドプロンプトを起動し、コンパイルおよび実行を行ってみましょう。
※このプログラムはコンパイルエラーとなります

実行例

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の代入演算になります。左の型が整数で右の型が小数となり、コンパイルエラーとなります。

まとめ

  • 代入演算は変数内にデータを入れることができる
  • 代入演算には算術を行いながら代入を行う演算もある
  • 代入演算時はに気を付ける
  • 「バイト数の大きい型の値」を「バイト数の小さい型の変数」へ代入することができない
  • 「バイト数の小さい型の値」を「バイト数の大きい型の変数」へ代入すると、大きい型へ型変換が行われ、代入される
  • 「整数の型の値」を「小数の型の変数」へ代入すると、小数へ型変換されてから代入される
  • 「小数の型の値」を「整数の型の変数」へ代入すると、型変換は行われずエラーとなる
  • 算術演算と代入演算が混合する場合はに注意
参加 ブログランキング

記事頑張って書いたかもねー?と思う方は下を押してもらえるといいかなーなんて
にほんブログ村 IT技術ブログへ
にほんブログ村


Javaランキング

目次へのアクセス
スポンサーリンク
レクタングル

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
レクタングル