java学び直しメモ part1 ～データ型～

内定者研修でjavaの勉強を1からやり直すことになったので，メモとして書き残していきたいと思います．
超初心者向けに関係ないことも色々書いていきます．

## 今回の内容
1.各種データ型（int，long，double，char，boolean，string）について学ぶ．
2.ついでにエスケープシーケンスを使う．

## データ型とは
データ型というのは，プログラム内で扱うデータの種類のことです．
1，-50，7000，みたいな整数を扱う場合と，「こんにちは」みたいな文字列を扱う場合では，それぞれ異なるデータ型を指定しなければなりません．
javaでは主にint，long，double，char，boolean，stringの6つのデータ型を扱います．

## int型
int型は1，-50，7000，みたいな整数を扱う場合に使います．
javaのint型は4バイト符号付き整数ですので，-2147483648～2147483647の範囲の数字を扱うことができます．それよりも大きい（小さい）数字を扱いたいときはlong型を使います（後述）．
int型の変数宣言はこんな感じ（ほかも大体一緒だけどね…）．

```java:IntDeclaration.java
int hoge;
int hoge = 3;
```

1行目は**変数宣言**を行うだけ．
2行目は変数宣言と同時に「3」を**代入**する場合です．
プログラミング超初心者向けに詳しく説明しておくと，

* **変数宣言**…「これからこういう名前のこのデータ型の変数を使います！」という風に宣言すること．これをしてあげないと，変数が使えない．
* **代入**…変数に値を格納すること．「hoge = 数字」とやると，hogeという変数に数字が上書きされる．

こんな感じに使います．

```java:DataInt.java
public class DataInt {

    public static void main(String[] args) {
	// 変数value1を宣言，初期化する
	int value1 = 7000;
	// 変数value1の値を表示する
	System.out.println("value1 = " + value1);
	// 変数value2を宣言，初期化する
	int value2 = -50;
	// 変数value2の値を表示する
	System.out.println("value2 = " + value2);
	// 定数VALUE1を宣言，代入する
	final int VALUE1 = 21;
	// 定数VALUE1の値を表示する
	System.out.println("VALUE1 = " + VALUE1);
    }

}
```
それぞれの変数を宣言，代入して，変数の値を標準出力するだけのプログラムです．

```sh:実行結果
value1 = 7000
value2 = -50
VALUE1 = 21
```

## long型
long型は，int型よりも大きい（小さい）数字を扱うことができます．
8バイト符号付き整数ですので，約-922京～約922京の範囲の数字を扱うことができます．すごい（小並感）
基本的にint型と同じ使い方ですが，代入するときに数字の最後に**「L」**をつけるというルールがあります．

```java:LongDeclaration.java
long hoge;
long hoge = 2500000000L;
```

いまさらですけど，javaは行の終わりに必ず「;」（セミコロン）をつけないといけません．
僕はこれが嫌いです（忘れるから）．
ちなみにPythonというプログラミング言語はセミコロンが要りません．すごい（小並感）
さらに変数宣言も要りません．すごい（小並感）
…long型の使い方はこんな感じです．

```java:DataLong.java
public class DataLong {
    
    public static void main(String[] args) {
	// 変数value1に7000000000000Lを代入する
	long value1 = 7000000000000L;
	// 変数value1の値を表示する
	System.out.println("value1 = " + value1);
	// 変数value2に-500000000000Lを代入する
	long value2 = -500000000000L;
	// 変数value2の値を表示する
	System.out.println("value2 = " + value2);
	// 定数VALUE1に210000000000Lを代入する
	final long VALUE1 = 210000000000L;
	// 変数VALUE1の値を表示する
	System.out.println("VALUE1 = " + VALUE1);
    }

}
```

DataInt.javaをちょっとだけ改変しただけです．
実行するとこんな感じ．

```sh:実行結果
value1 = 7000000000000
value2 = -500000000000
VALUE1 = 210000000000
```

もちろん，long型でint型の範囲の数字を扱うこともできますけど，その変数に入れる可能性がある数字がint型の範囲に収まっているのであれば，int型を使うのが好ましいです．
無駄なメモリを食わないようにしましょうね．

## double型
double型は小数を扱うためのデータ型です．int型やlong型では小数は扱えません．
double型は8バイト浮動小数点数と呼ばれる小数を扱います．
double型では小数第1位が0でも，「.0」まで書き，末尾に**「d」**をつけるというルールがあります．
宣言は…省略したい…

```java:DoubleDeclaration.java
double hoge;
double hoge = 14.3d;
```

またしても使いまわし．

```java:DataDouble.java
public class DataDouble {
    
    public static void main(String[] args) {
	// 変数value1に70.1dを代入する
	double value1 = 70.1d;
	// 変数value1の値を表示する
	System.out.println("value1 = " + value1);
	// 変数value2に-5.0dを代入する
	double value2 = -5.0d;
	// 変数value2の値を表示する
	System.out.println("value2 = " + value2);
	// 定数VALUE1に2.1dを代入する
	final double VALUE1 = 2.1d;
	// 変数VALUE1の値を表示する
	System.out.println("VALUE1 = " + VALUE1);
    }

}
```

実行結果はこちら．

```sh:実行結果
value1 = 70.1
value2 = -5.0
VALUE1 = 2.1
```

もうわかってきましたか？

## char型
今までは数字を扱うデータ型でしたが，char型は文字を扱うデータ型です．
2バイトなので1つの変数で1つの文字しか使えないです．
ちなみに，「char」は「きゃら」とか「ちゃー」って読みます．
僕は「きゃら」派ですがたまに「ちゃー」って言ったりします．
代入するときは，文字を「'」（シングルクォート）で囲みます．

宣言飛ばします！！

```java:DataChar.java
public class DataChar {
    
    public static void main(String[] args) {
	// 変数value1に'a'を代入する
	char value1 = 'a';
	// 変数value1の値を表示する
	System.out.println("value1 = " + value1);
	// 変数value2に'あ'を代入する
	char value2 = 'あ';
	// 変数value2の値を表示する
	System.out.println("value2 = " + value2);
	// 定数VALUE1に'1'を代入する
	final char VALUE1 = '1';
	// 変数CHAR_VALUE1の値を表示する
	System.out.println("VALUE1 = " + VALUE1);
    }

}
```

ここで1点注意！
char型は文字なので，VALUE1に代入した「1」は**文字**の「1」です．
なので，足し算とか引き算とかその他もろもろは**できません！**
変数を足し算引き算とかに使うなら，上記のどれかを使いましょう．

## boolean型
boolean型は一般に「フラグ」とも呼ばれ，**「true」**か**「false」**のどちらかの値しか持たないという特殊な変数です．
「死亡フラグ」とかのフラグです．
フラグが立つ＝true，フラグが折れる＝false，という感じですかね．
あ，ちなみに「ぶーりあん」と読みます．
trueとかfalseっていう値のことをブール値って言ったりします．

```java:DataBoolean.java
public class DataBoolean {

    public static void main(String[] args) {
	// 変数value1にtrueを代入する
	boolean value1 = true;
	// 変数value1の値を表示する
	System.out.println("value1 = " + value1);
	// 変数value2にfalseを代入する
	boolean value2 = false;
	// 変数value2の値を表示する
	System.out.println("value2 = " + value2);
	// 定数VALUE1にtrueを代入する
	final boolean VALUE1 = true;
	// 変数VALUE1の値を表示する
	System.out.println("VALUE1 = " + VALUE1);
    }
    
}
```

```sh:実行結果
value1 = true
value2 = false
VALUE1 = true
```

こんなのどこで使うんだ？って思うかもしれませんが，そのうち使う時が来ます．

## string型
string型はchar型とは異なり，**文字列**を扱うことができるデータ型です．
string型なら複数文字でも1つの変数に格納できます．
代入するときは，文字列を「"」（ダブルクォート）で囲みます．

```java:DataString.java
public class DataString {
    
    public static void main(String[] args) {
	// 変数value1に"java学習"を代入する
	String value1= "java学習";
	// 変数value1の値を表示する
	System.out.println("value1 = " + value1);
	// 変数value2に"あ"を代入する
	String value1 = "あ";
	// 変数value1の値を表示する
	System.out.println("value1 = " + value1);
	// 定数VALUE1に"ジャバ"を代入する
	final String VALUE1= "ジャバ";
	// 変数VALUE1の値を表示する
	System.out.println("VALUE1 = " + VALUE1);
    }

}
```

string型は文字列なので，char型の「あ」とstring型の「あ」は**異なります**．

## エスケープシーケンス
エスケープシーケンスとは，通常では表示できない特殊文字を出力する方法です．
例えば，なにも考えずに標準出力で「今日は"晴れ"です．」と出力しようとすると，こうなります．

```java:Escape.java
System.out.println("今日は"晴れ"です．")
```

これでは，「今日は」と「です．」は「"」で囲まれていても，「晴れ」が囲まれていないことになってしまいます（括弧と一緒）．
こういうときは，「￥」を使います．
これは全角だけどコードは半角で書いてください．環境によっては「\\」になっちゃうかも…

```java:Escape2.java
System.out.println("今日は\"晴れ\"です．")
```

…「￥（半角）」が出せない…
まぁこれを使うことで特殊文字が打てるってことです！！
改行は「\\n」，タブは「\\t」等色々あるのでググってみてください．

## おわり
長くなりましたけど，データ型とエスケープシーケンスについて，ある程度は解説しきったと思います．
Qiita慣れてなくて書き方がわからんので勉強しておきます…