計算の文
計算の文とは、変数や値を用いた様々な計算処理をコンピュータに行わせるための文。
「四則演算」や「変数に値を代入」するのが計算である。
//例
public class Main {
public static void main(String[] args) {
int a; //ここは変数宣言の文
int b; //ここは変数宣言の文
a = 20; //「計算の文」(代入)
b = a + 5; //「計算の文」(足し算して代入)
System.out.println(a);
System.out.println(b);
}
}
/*実行結果
20
25
*/
「b = a + 5」のようなものを「式」という。
式の構成要素
まず、式はどのような要素があるのか確認してみよう。
例えば「b = a + 5」を分解すると→変数の「a」「b」や値の「5」、計算記号の「=」「+」に分けることができる。
変数(例.a,b)と値(例.5)を「オペランド」
計算記号(例.=,+)を「演算子」
どんな「式」にも「オペランド」と「演算子」の2つの要素のみで構成されている。
オペランド
●リテラル
オペランドの中でも数値「4」や文字列「Hello World」などソースコードで表現される具体的な値を「リテラル」という。そして「それぞれのリテラルはデータ型を持っている」
リテラルの種類 | 表記例 | 型 |
---|---|---|
小数点がない数字 | 30 | int |
小数点がない数字で末尾がL又はl | 300000L | long |
小数点付きの数字 | 30.5 | double |
小数点付きの数字で末尾がF又はf | 30.5F | float |
true又はfalse | true | boolean |
引用符で囲まれた文字 | '雅' | char |
二重引用符で囲まれた文字 | "Java" | String |
※「1」(int型)、「'1'」(char型)、「"1"」(String型)は、どれも別物。
●リテラル以外のオペランド
「変数」、「定数」、「命令の実行結果」
エスケープシーケンス
String型やchar型のリテラルを記述する際に、時々用いられるのが「エスケープシーケンス」と呼ばれる特殊文字。
「¥」記号とそれに続く1文字の合計2文字による記述方法で、その2文字で特殊な1文字を表現する。
表記 | 格納するデータ |
---|---|
¥" | 二重引用符記号(") |
¥' | 引用符記号(’) |
¥¥ | 円記号(¥) |
¥n | 改行(制御文字) |
どのような順番で式が計算されていくか
javaが式に従って計算処理をすることを、式の「評価」と呼ぶ。
3つの原則に従いながら、式の一部から少しずつ部分的に処理していき、最後に式全体の計算処理が完了する。
①評価結果への置換の原則
演算子は周囲のオペランドの情報を使って計算を行い、それらオペランドを巻き込んで結果に化ける(置き換わる)。段階的に評価される。
②優先順位の原則
()内の式は、評価順位を上げれる。
式に演算子が複数ある場合、JAVAで定められた優先順位の高い演算子から順に評価される。
※詳細は演算子にて…
③結合規則の原則
式の中に同じ優先順位グループに属する演算子が複数ある場合、「演算子ごとに決められた方向(⇄)から順に」評価される。
例)=演算子は右のものから評価される。 a=b=10の場合、b=10が先に評価され、次にa=10が評価されaに10が代入される。
※詳細は演算子にて…
演算子
主に4分類(算術演算子、文字列結合演算子、代入演算子、インクリメント/デクリメント演算子)に分けられる。
●算術演算子
演算子 | 機能 | 優先順位 | 評価の方向 | 評価の例 |
---|---|---|---|---|
+ | 加算(足し算) | 中(5) | 左→右 | 3+5→8 |
- | 減算(引き算) | 中(5) | 左→右 | 10-3→7 |
* | 乗算(掛け算) | 高(4) | 左→右 | 3*2→6 |
/ | 除算(割り算)※整数演算では商 | 高(4) | 左→右 | 3.2/2→1.6、 9/2→4 |
% | 剰余(割り算の余り) | 高(4) | 左→右 | 9%2→1 |
●文字列結合演算子
演算子 | 機能 | 優先順位 | 評価の方向 | 評価の例 |
---|---|---|---|---|
+ | 文字列の連結 | 中(5) | 左→右 | "こん"+"にちは"→"こんにちは"、"ベスト"+3→ベスト3 |
●代入演算子
右オペランドの内容を左オペランドの変数に代入する演算子。
代入は基本的に最後に行うものと覚えておこう。
演算子 | 機能 | 優先順位 | 評価の方向 | 評価の例 |
---|---|---|---|---|
= | 右辺を左辺に代入 | 最低(15) | 右→左 | a=10→a (中身は10) |
+= | 左辺と右辺を加算して 左辺に代入 |
最低(15) | 右→左 | a+=2→a (a=a+2と同じ) |
-= | 左辺から右辺を減算し 左辺に代入 |
最低(15) | 右→左 | a-=2→a (a=a-2と同じ) |
*= | 左辺と右辺を乗算し 左辺に代入 |
最低(15) | 右→左 | a*=2→a (a=a*2と同じ) |
/= | 左辺と右辺を除算し 左辺に代入 |
最低(15) | 右→左 | a/=2→a (a=a/2と同じ) |
%= | 左辺と右辺を除算し その余りを左辺に代入 |
最低(15) | 右→左 | a%=2→a (a=a%2と同じ) |
+= | 左辺の後に 右辺を連結して代入 |
最低(15) | 右→左 | a+="風"→a (a=a+"風"と同じ) |
●インクリメント/デクリメント演算子
1増やしたい/減らしたい場合に使用する便利な記述。
左右両方にはオペランドを持たない特徴を持つ。単項演算子と総称される。
演算子 | 機能 | 優先順位 | 評価の方向 | 評価の例 |
---|---|---|---|---|
++ | 値を1増やす | 最高(1) | 左→右 | a++→a (a=a+1やa+=1と同じ) |
-- | 値を1減らす | 最高(1) | 左→右 | a--→a (a=a-1やa-=1と同じ) |
型変換(3種類)
変数の型を別の型に変換することを型変換という。
●代入時の自動型変換
ある型で宣言された変数には、その型の値しか代入できません。
int型変数にはint型の整数だけ、String型の変数には文字列のみしか代入できないというのが原則。
int = age;
◯ age = 23;
× age = 3.2;
× age = "秘密";
しかし!!!!数値型にて…
「小さな型」の値を「大きな型」の変数に代入する場合に限って、「値が自動的に箱の型に変換されて代入」される。
//例
public class Main {
public static void main(String[] args) {
float f = 3; //float型の変数にint型を代入
double d = f; //double型の変数にfloat型を代入
System.out.println(f);
System.out.println(d);
}
}
/*実行結果
3.0
3.0
*/
●強制的な型変換
※「大きな型」の値を「小さな型」の変数に代入することは原則できない。
しかし、「キャスト演算子」を用いることで強制的に行型変換することができる。
情報の欠損が発生する為、よほどの理由がない限り使わないこと。
(変換先の型名)式
//例
public class Main {
public static void main(String[] args) {
int age = (int)3.2; //キャスト演算子
System.out.println(age);
}
}
/*実行結果
3
*/
●演算時の自動型変換
※前提として計算が行われる場合も「左右のオペランドは同一の型」が原則。
異なる型で演算を行なった場合…「大きな型に統一されてから演算」が行われる。
//例
public class Main {
public static void main(String[] args) {
double d = 8.5 / 2;
long l = 5 + 2L;
System.out.println(d);
System.out.println(l);
}
}/*実行結果
4.25
7
*/
因みに、文字列(String)を含む演算時の型変換は、他方もString型に変換され連結する。
//例
public class Main {
public static void main(String[] args) {
String msg = "私の年齢は" + 23;
System.out.println(msg);
}
}
/*実行結果
私の年齢は23
*/