Javaで学習してきたこと（その２）変数とは

#Javaの振り返り
前回に引き続きJavaを勉強してきた内容を大まかに振り返りたいと思います。

※良ければ以前の記事もご覧ください
[Javaで学習してきたこと（その1）Java開発の流れと全体像](https://qiita.com/adgjmptw0/items/2ed35925c88ca061a3f6)

#変数とは
Javaは一つ一つ箱を作りながらシステムを構築していくイメージです。

その箱の中の最小単位となるのが変数です。
変数はデータを入れておくための箱を用意して、
その中にデータを入れたり取り出したりする
ことができます。
![スクリーンショット 2020-11-06 121659.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/45fc8e2b-79a9-7eb6-f0d9-1ada45bb5eeb.png)

例として

```java
public class Main {
	public static void main(String[] args) {
		int age;
		age = 20;
		System.out.println(age);
	}
}
```
※age（年齢）
実行結果
![スクリーンショット 2020-11-05 132322.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/e9c80c6d-28aa-5825-ef2a-449963819b14.png)
上記のソースコードが何をしているのかというと
1.変数「age」を作成
2.「age」の中に整数の「20」を入れる（代入）
3.「age」の中身をコンソールに表示
イメージとしてはこんな感じです！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/7548e531-712c-e814-96ee-f40870d00820.png)
1から順に説明していきたいと思います。
###変数宣言
まずはデータを入れるための箱の作成（変数宣言）をします。
箱といっても何でも入るわけではありません。
Javaでは何を入れるための箱かを明確に指定しなければ
いけません。

先ほどの「age（年齢）」は「int型」という整数を入れるための箱となっています。
整数以外（文字列や小数点数）は入れることができません。
![スクリーンショット 2020-11-06 225242.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/e2e569f7-03df-750d-042e-2bd17fc8604d.png)
Javaでは予め中に入れるデータの型（※以下「データ型」）を決めておく必要があります。
これを「変数宣言」と言います。

```java
int age;
```
上記は「int型のageという箱を作ります」という変数宣言です。
![スクリーンショット 2020-11-06 125221.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/e30371ca-678a-dc8b-b452-51916355e9f3.png)
###データの代入
```java
int age;
age = 20;
```
作成した変数「age」の中に整数の「20」を代入します。
![スクリーンショット 2020-11-06 142022.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/5e79632e-7931-3bda-f196-ff7697b52778.png)
先ほど述べた通りこのint型変数「age」には文字や小数点数などは入れることができません。
入れようとするとコンパイル（コンピューターが読める文に変換）できず、修正を求められます。

※代入は変数宣言と一緒に書くことも可能です。

```java
int age = 20;
```
###データの参照
データの代入後

```java
System.out.println(age);
```
System.out.println();とは末尾の（）内をコンソール（コンピューターと会話する場所）に表示させるための処理です。ここで「age」を指定しているため先ほど代入した「20」が表示されます。
![スクリーンショット 2020-11-06 145439.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/a697a9ab-65e2-3559-d367-0a086b6a8a55.png)
ではここで「20」の入った変数「age」へ更に「30」を代入したらどうなるか？

```java
public class Main {
	public static void main(String[] args) {
		int age;
		age = 20;
		age = 30;
		System.out.println(age);
	}
}
```
実行結果
![スクリーンショット 2020-11-06 143155.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/5c37e4f8-fd5f-1a3b-5455-59ca280f9a2d.png)
「変」わる「数」という名前の通り、一番新しく代入されたものに上書されていきます。
![スクリーンショット 2020-11-06 160755.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/4ac06774-d75f-f559-ae80-a021b2560325.png)
###データ型
データ型はint型だけではありません。
先ほど述べた「文字列」や「小数点数」等を入れるためのデータ型もあります。
以下にまとめたいと思います。

|  分類  |  型名  |  格納するデータ  |
| ---- | ---- | ---- |
|  整数  |  long  |  大きな整数  |
|    |  int  |  普通の整数  |
|    |  short  |  小さな整数  |
|    |  byte  |  さらに小さな整数  |
|  小数点数  |  double  |  倍精度浮動小数点数  |
|    |  float  |  単精度浮動小数点数、少しあいまいでもよい小数点付きの数  |
|  真偽値  |  boolean  |  trueかfalse  |
|  文字  |  char  |  1つの文字  |
|  文字列  |  String  |  文字の並び  |
※[倍精度浮動小数点数](https://wa3.i-3-i.info/word14961.html)

勉強初めは
整数を使う場合int
小数点数を使う場合double
二者択一を使う場合boolean
文字列を使う場合String
と覚えておけば大丈夫です！

###プリミティブ型と参照型
データ型には更に大きなくくりとしてプリミティブ型と参照型がある。
プリミティブ型は「箱」に値を直接入れる。
整数（long,int,short,byte）小数点数（double,float）真偽値（boolean）文字（char）
![スクリーンショット 2020-11-06 142022.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/5e79632e-7931-3bda-f196-ff7697b52778.png)
それに対して参照型は具体的なデータではなくメモリ上の番地を代入します。
String型や後日まとめたいと思いますが「配列」「List」等もこの参照型に含まれます。
![スクリーンショット 2020-11-06 234019.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/78ff4749-d85b-df46-dd87-bc43cff514be.png)
直接「文字列」が入るのではなく、、、
![スクリーンショット 2020-11-06 235437.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/2808578a-2ce2-4725-5f83-c6949ecd0723.png)
具体的にはもうワンクッション入るのですが図のように、名前の「文字」の並びの先頭の番地が代入されます。
※わかりずらかったらごめんなさい。
#なぜ変数を使うのか？
変数を使用することで以下の2点のメリットがあげられます。
・汎用性が高くなる。
・変更、修正がしやすくなる。

リンゴの売り上げで例えると

```java
public class Main {
	public static void main(String[] args) {
		//リンゴの値段を100円とする
		int apple = 100;
		
		//各地域の売り上げ
		int tokyo = 100 * apple;
		int kanagawa = 80 * apple;
		int tiba = 70 * apple;
		
		//売り上げの合計
		int totalSales = tokyo + kanagawa + tiba; 
		
		//総売り上げの表示
		System.out.println(totalSales);
	}
}
```
実行結果
![スクリーンショット 2020-11-08 232255.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/95cb8ec4-83c0-a9bb-5352-134d45cdb39f.png)
総売り上げが表示されます。
ここでもしリンゴの値段が間違っていた場合、もしくは値段を上げた時の見積もりを出したい時など
シチュエーションは様々ですがリンゴの値段を変えたい時に修正箇所が一ヵ所ですみます。

```java
public class Main {
    public static void main(String[] args) {
        //リンゴの値段を100円から120円に修正する
        int apple = 120;

        //各地域の売り上げ
        int tokyo = 100 * apple;
        int kanagawa = 80 * apple;
        int tiba = 70 * apple;

        //売り上げの合計
        int totalSales = tokyo + kanagawa + tiba; 

        //総売り上げの表示
        System.out.println(totalSales);
    }
}

```
実行結果
![スクリーンショット 2020-11-08 232335.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/2bd41fb5-1e32-d93d-fef1-0af7219a54f9.png)

例えとしてわかりにくいかもしれませんが勉強を進めていくうちに理解できてくると思います。
#参考文献
https://book.impress.co.jp/books/1113101090

次回は「命令実行の文」について書いていきたいと思います！