Java Basic booleanの意味と条件分岐 〜Step1_2_2〜

イントロダクション

前回までに使用した変数にint型, dluble型がありますが、これらはプリミティブ型変数と呼びます。

これに対して、String型のようにクラスとしてJavaで定義されているものは参照型と呼びます。

具体的には、メソッドが呼べるか呼べないかの違いがあると思ってください。

そして、もう1つ参照型変数はインスタンスを参照します。このインスタンスがキーポイントになりますが、今はString型の変数を初期化したら、その変数にはString型のインスタンスが入っているんだなと理解してください。

具体的には下のようなコードになります。

int num = 0;
//int num1 = null; -> ビルドエラー
String moji = "abc";
String moji2 = null;
  1. プリミティブ型の変数にはnullを代入できません。プリミティブ型は何もない=「参照なし」の状態にはできないのです。
  2. 参照型にはnullが代入できます。参照型は何もない=「参照なし」の状態があり得ます。

String型のような参照型の変数は、常にクラスを参照しようとします。なのでどこも参照したくない場合はnullを代入します。俗にいうと「メモリを解放する」という処理になります。

そして、プリミティブ型の変数、intdoubleを使用してきましたが。これらの変数はメモリ領域を直接確保します。
なので、確保した領域に「何もない」=nullを代入することができません、つまり、はじめから変数を宣言(初期化)=メモリ領域の確保、は必要ないからです。

具体的には、下のようなプログラムを見ていただくとわかると思います。

int num; // int型の変数を宣言=4バイト文のメモリ領域の確保
int num1 = 1; // 上と同様に4バイト文のメモリ領域を確保

String moji = null; // 変数を宣言しているが、メモリ領域は確保していない
String moji2 = "a"; // 変数を宣言して値を設定しているので1バイト分のメモリ領域を確保

上記のようになります。

boolean型

プリミティブ型の変数booleanの扱い方について記載します。

Boolean

真偽値で、条件分岐を行うのに便利

// sample
int a = 1;
int b = 2;
boolean isSame = a == b;
System.out.pintln(isSame);

上のコードは、int型の変数、「a」「b」を初期化してそれぞれの値が等しいかどうか検証しています。

boolean isSame = a == b;

この行が判定している処理になります。

そして、この判定結果がboolean型の変数isSameに代入されています。

#### 早い話が
aとbが等しい時は「true」、そうでない場合は「false」が変数isSameに代入されます。

これを確かめるのには、上のコードを実行してみればわかります。

試しに、「a」「b」の値を変更して実行して見てください。
どのような結果になるか予想してから実行して見てください、

ちょっとしたクイズゲームみたいでしょう?

#### ちょっとしたクイズゲーム
上のコードを書き換えて、下のように修正しました。これを写経して動かして見てください。

```java
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String num1 = scan.next();
String num2 = scan.next();

int a = Integer.parseInt(num1);
int b = Integer.parseInt(num2);

boolean isSame = a == b;
System.out.println(isSame);
}
```

```java
// sample
int a = 1;
int b = 2;
boolean isSame = a == b;
if (isSame) {
System.out.println(a + “ and “ + b + “ is same”);
} else {
System.out.println(a + “ and “ + b + “ is not same”);
}
```

ちなみに、自分が作成したものを動画にして見ました。

プログラム引数

Javaプログラムを起動するときに渡す値のこと
```java
public static void main(String[] args) {
System.out.println(“プログラム引数は” + args[0] + “です”);
}
```
上のコードはプログラム引数を渡さないと落ちます!

Eclipseで実行するときは以下のような画面で
「引数」「Arguments」のタブより
「プログラム引数」と「VM引数」とあるので
プログラム引数の部分に入力する

VM引数

システムプロパティなどに使う、Java Vertual Machine(JVM)に渡す引数
「-D引数」という形で渡す※全てではない

![](http://zenryokuservice.com/wp/wp-content/uploads/2018/05/スクリーンショット-2018-05-09-20.21.43.png)

IF文の書き方

【条件分岐の書き方】
```java
if ( 条件式 ) {
   処理
} else if( 条件その2) {
    処理2
} else {
    上記の条件以外のケースの処理

```

上の「条件式」の部分には論理式が入ります。**論理式**はboolean型の値を返却する式のことです。
具体的には下のようになります。

【boolean(真偽値)】
```java
// 下の変数には全てtrueが入ります
boolean isSame = 1 == 1;
boolean notSame = 1 != 2;

boolean isSameString = "1".equals("1");
boolean notSameString = !"1".equals("1");

boolean yes = true;
boolean no = false;

// 論理演算
boolean result = yes & no; // falseになる AND演算
result = yes | no; // trueになる OR演算
result = yes ^ no; // trueになる XOR演算
result = ~yes; // falseになる NOT演算
```

|日本語| 演算(演算子) | 真偽値1 | 真偽値2 | 結果 |
| -------| ---------------- | --------- | ---------- | ------ |
| 論理積 | AND(&)| TRUE | TRUE | TRUE|
| 論理積 | AND(&)| TRUE | FALSE | FALSE|
| 論理積 | AND(&)| FALSE | FALSE | FALSE|
| 論理和 | OR(\|)| TRUE | TRUE | TRUE|
| 論理和 | OR(\|)| TRUE | FALSE | TRUE|
| 論理和 | OR(\|)| FALSE | TRUE | TRUE|
| 論理和 | OR(\|)| FALSE | FALSE | FALSE|
| 排他的論理和 | XOR(^)| TRUE | TRUE |FALSE|
| 排他的論理和 | XOR(^)| TRUE | FALSE | TRUE|
| 排他的論理和 | XOR(^)| FALSE | TRUE | TRUE|
| 排他的論理和 | XOR(^)| FALSE | FALSE | FALSE|
| 否定(ビット反転) | NOT(~)| TRUE| - | FALSE |
| 否定(ビット反転) | NOT(~)| FALSE| - | TRUE |

```java
boolean and = true & false;
boolean or = true | false;
boolean xor = true ^ false;
// NOT演算
boolean not = !false;
```

【標準入力】 ※低レベルな書き方です。
```java
public static void main(String[] args) {
byte[] input = new byte[5]; // 5文字までの入力分
System.in.read(input);
System.out.println(input); // コンソール出力
}
```

【標準入力】 ※Java8の書き方です。
```java
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String input = scan.next();
}
```

【プログラム引数の使い方】
```java
public static void main(String[] args) {
// プログラム引数はスペースで区切ると複数個入力できる
System.out.println("プログラム引数: " + args[0]);
}
```

【標準出力・入力のメソッドについて】
「System.out.println("文字列");」とコードを記載すると思いますが
Systemクラスのoutフィールドに定義されている「printlnメソッド」を
いつも使用しています。

JavaDocAPIを見るとそのように書いてあります。
Javaに関してはこのJavaDocを読んで理解できるようになれば
Javaの基本はマスターしたと言って過言はありません。

![](http://zenryokuservice.com/wp/wp-content/uploads/2018/05/スクリーンショット-2018-05-09-20.48.15.png)

とりあえずは、こんな感じです。

## switch文
今度はswitch文についてです。

IF文と同じように条件分岐を行いますが、コードの書き方が違います。
```java
switch (値) {
case 値がXXの時:
// 何かしらの処理
break;
case "文字":
// 何かしらの処理
break;
case "文字2":
// 何かしらの処理
break;
default:
// 想定外の値の時の処理
}
```

実際に使用する時は「値がXXの時」の部分を指定した値の時の処理を書きます。
言葉で示すよりもコードで示す方が良いと思いますので、以下に示します。

```java
String moji = "aa";
switch (moji) {
case "aa":
System.out.println("1. 何かしらの処理");
break;
case "abc":
System.out.println("2. 何かしらの処理");
break;
default:
System.out.println("3. 何かしらの処理");
}
```

上記の場合、String型の変数「moji」に「aa」という値が入っていますので。「1. 何かしらの処理」が標準出力に表示されます。(出力されます)

そして、case文の中にある「break」がない時は、全て表示されます。具体的には以下の通りです。

```java
String moji = "aa";
switch (moji) {
case "aa":
System.out.println("1. 何かしらの処理");
case "abc":
System.out.println("2. 何かしらの処理");
default:
System.out.println("3. 何かしらの処理");
}
```

この場合は、下のように出力されます。
> 1. 何かしらの処理
2. 何かしらの処理
3. 何かしらの処理

そして、次の場合はどうでしょうか?
```java
String moji = "aa";
switch (moji) {
case "aa":
System.out.println("1. 何かしらの処理");
case "abc":
System.out.println("2. 何かしらの処理");
break;
default:
System.out.println("3. 何かしらの処理");
}
```

> 1. 何かしらの処理
2. 何かしらの処理

と表示されます。これはcase "aa"のcase文に「break」がなく次の"abc"の部分に「break」があるからです。

つまり「break」は「{}」の中から外に出ますよという意味です。

if文の時でも同様ですが、意味がないので使用しません。

次にやるループ処理では大いに意味があるので使います。

##### 変数「i」が3の時ループを抜ける処理
```java
for (int i = 0; i < 10; i++) {
if (i == 3) {
break;
}
}
```

<<<[前回](http://zenryokuservice.com/wp/2018/05/04/java-bassic-3/) [次回](http://zenryokuservice.com/wp/2018/05/12/java-basic-for%e6%96%87-%e3%80%9cstep1_3_1%e3%80%9c/)>>>

### 関連ページ
* [Java はじめて 1 〜メインメソッド〜](http://zenryokuservice.com/wp/2019/09/04/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a6-1-%e3%80%9c%e3%83%a1%e3%82%a4%e3%83%b3%e3%83%a1%e3%82%bd%e3%83%83%e3%83%89%e3%80%9c/)
* [Java はじめて2 〜メソッドを呼び出す〜](http://zenryokuservice.com/wp/2019/09/05/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a62-%e3%80%9c%e3%83%a1%e3%82%bd%e3%83%83%e3%83%89%e3%82%92%e5%91%bc%e3%81%b3%e5%87%ba%e3%81%99%e3%80%9c/)
* [Java はじめて3 〜コメントの書き方〜](http://zenryokuservice.com/wp/2019/09/06/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a63-%e3%80%9c%e3%82%b3%e3%83%a1%e3%83%b3%e3%83%88%e3%81%ae%e6%9b%b8%e3%81%8d%e6%96%b9%e3%80%9c/)
* [Java はじめて4〜練習問題をやってみる〜](http://zenryokuservice.com/wp/2019/09/07/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a64%e3%80%9c%e7%b7%b4%e7%bf%92%e5%95%8f%e9%a1%8c%e3%82%92%e3%82%84%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%8b%e3%80%9c/)
* [Java はじめて5 〜変数について〜](http://zenryokuservice.com/wp/2019/09/08/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a65-%e3%80%9c%e5%a4%89%e6%95%b0%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6%e3%80%9c/)
* [Java はじめて6 〜変数について2、byte, char, boolean型〜](http://zenryokuservice.com/wp/2019/09/09/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a66-%e3%80%9c%e5%a4%89%e6%95%b0%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6%ef%bc%92%e3%80%81byte-char-boolean%e5%9e%8b%e3%80%9c/)
* [Java はじめて7 〜配列とは、配列の使い方〜](http://zenryokuservice.com/wp/2019/09/10/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a67-%e3%80%9c%e9%85%8d%e5%88%97%e3%81%a8%e3%81%af%e3%80%81%e9%85%8d%e5%88%97%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9%e3%80%9c/)
* [Java はじめて8 〜booleanとif~](http://zenryokuservice.com/wp/2019/09/11/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a68-%e3%80%9cboolean%e3%81%a8if/)
* [Java はじめて 9 〜switch文〜](http://zenryokuservice.com/wp/2019/09/12/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a6-9-%e3%80%9cswitch%e6%96%87%e3%80%9c/)
* [Java はじめて 10 〜ループ処理A: for文1〜](http://zenryokuservice.com/wp/2019/09/13/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a6-10-%e3%80%9c%e3%83%ab%e3%83%bc%e3%83%97%e5%87%a6%e7%90%86a-for%e6%96%871%e3%80%9c/)
* [Java はじめて 11 〜ループ処理A: for文2 拡張for文〜](http://zenryokuservice.com/wp/2019/09/14/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a6-11-%e3%80%9c%e3%83%ab%e3%83%bc%e3%83%97%e5%87%a6%e7%90%86a-for%e6%96%872-%e6%8b%a1%e5%bc%b5for%e6%96%87%e3%80%9c/)
* [Java はじめて12 〜ループ処理B: while文〜](http://zenryokuservice.com/wp/2019/09/15/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a612-%e3%80%9c%e3%83%ab%e3%83%bc%e3%83%97%e5%87%a6%e7%90%86b-while%e6%96%87%e3%80%9c/)
* [Java はじめて13 〜ループ処理C: do-while文〜](http://zenryokuservice.com/wp/2019/09/16/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a613-%e3%80%9c%e3%83%ab%e3%83%bc%e3%83%97%e5%87%a6%e7%90%86c-do-while%e6%96%87%e3%80%9c/)
* [Java はじめて14 〜クラスの作り方〜](http://zenryokuservice.com/wp/2019/09/17/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a614-%e3%80%9c%e3%82%af%e3%83%a9%e3%82%b9%e3%81%ae%e4%bd%9c%e3%82%8a%e6%96%b9%e3%80%9c/)
* [Java はじめて15 〜クラス型変数の使い方〜](http://zenryokuservice.com/wp/2019/09/18/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a615-%e3%80%9c%e3%82%af%e3%83%a9%e3%82%b9%e5%a4%89%e6%95%b0%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9%e3%80%9c/)
* [Java はじめて16 〜クラス設計から実装〜](http://zenryokuservice.com/wp/2019/09/19/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a616-%e3%80%9c%e3%82%af%e3%83%a9%e3%82%b9%e8%a8%ad%e8%a8%88%e3%81%8b%e3%82%89%e5%ae%9f%e8%a3%85%e3%80%9c/)
* [Java はじめて17 〜設計後の部品を実装する1〜](http://zenryokuservice.com/wp/2019/09/20/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a617-%e3%80%9c%e8%a8%ad%e8%a8%88%e5%be%8c%e3%81%ae%e9%83%a8%e5%93%81%e3%82%92%e5%ae%9f%e8%a3%85%e3%81%99%e3%82%8b%e3%80%9c/)
* [Java はじめて18 〜設計後の部品を実装する2〜](http://zenryokuservice.com/wp/2019/09/21/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a618-%e3%80%9c%e8%a8%ad%e8%a8%88%e5%be%8c%e3%81%ae%e9%83%a8%e5%93%81%e3%82%92%e5%ae%9f%e8%a3%85%e3%81%99%e3%82%8b2%e3%80%9c/)
* [Java はじめて19 〜コンストラクタの役割を見る〜](http://zenryokuservice.com/wp/2019/09/22/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a619-%e3%82%b3%e3%83%b3%e3%82%b9%e3%83%88%e3%83%a9%e3%82%af%e3%82%bf%e3%81%ae%e5%bd%b9%e5%89%b2%e3%82%92%e8%a6%8b%e3%82%8b/)
* [Java はじめて20 〜チェック処理クラスを作る〜](http://zenryokuservice.com/wp/2019/09/23/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a620-%e3%80%9c%e3%83%81%e3%82%a7%e3%83%83%e3%82%af%e5%87%a6%e7%90%86%e3%82%af%e3%83%a9%e3%82%b9%e3%82%92%e4%bd%9c%e3%82%8b%e3%80%9c/)
* [Java はじめて21 〜オブジェクト指向的分析、アプリの拡張をする〜](http://zenryokuservice.com/wp/2019/09/24/coderbankap_custom3/)
* [Java はじめて22 〜オブジェクト指向的分析、アプリ拡張の実装とテスト〜](http://zenryokuservice.com/wp/2019/09/25/java-test-driven-development/)
* [Java はじめて23 〜テスト駆動型開発を行う〜](http://zenryokuservice.com/wp/2019/09/26/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a623-%e3%80%9c%e3%83%86%e3%82%b9%e3%83%88%e9%a7%86%e5%8b%95%e5%9e%8b%e9%96%8b%e7%99%ba%e3%82%92%e8%a1%8c%e3%81%86%e3%80%9c/)
* [Java はじめて24 〜JUnitでのテスト駆動型開発1〜](http://zenryokuservice.com/wp/2019/09/27/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a624-%e3%80%9cjunit%e3%81%a7%e3%81%ae%e3%83%86%e3%82%b9%e3%83%88%e9%a7%86%e5%8b%95%e5%9e%8b%e9%96%8b%e7%99%ba1%e3%80%9c/)
* [Java はじめて25 〜JUnitでのテスト駆動型開発2: テストケース作成〜](http://zenryokuservice.com/wp/2019/09/28/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a625-%e3%80%9cjunit%e3%81%a7%e3%81%ae%e3%83%86%e3%82%b9%e3%83%88%e9%a7%86%e5%8b%95%e5%9e%8b%e9%96%8b%e7%99%ba2-%e3%83%86%e3%82%b9%e3%83%88%e3%82%b1%e3%83%bc/)
* [Java はじめて26 〜JUnitでのテスト駆動型開発3: クラスの実装〜](http://zenryokuservice.com/wp/2019/09/30/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a626-%e3%80%9cjunit%e3%81%a7%e3%81%ae%e3%83%86%e3%82%b9%e3%83%88%e9%a7%86%e5%8b%95%e5%9e%8b%e9%96%8b%e7%99%ba3%e3%80%9c/)
* [Java はじめて27 〜JUnitでのテスト駆動型開発4: 追加修正と実装〜](http://zenryokuservice.com/wp/2019/10/01/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a627-%e3%80%9cjunit%e3%81%a7%e3%81%ae%e3%83%86%e3%82%b9%e3%83%88%e9%a7%86%e5%8b%95%e5%9e%8b%e9%96%8b%e7%99%ba4-%e8%bf%bd%e5%8a%a0%e4%bf%ae%e6%ad%a3%e3%81%a8/)
* [Java はじめて28 〜JUnitでのテスト駆動型開発5: ファイル出力の実装〜](http://zenryokuservice.com/wp/2019/10/02/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a628-%e3%80%9cjunit%e3%81%a7%e3%81%ae%e3%83%86%e3%82%b9%e3%83%88%e9%a7%86%e5%8b%95%e5%9e%8b%e9%96%8b%e7%99%ba5-%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e5%87%ba/)
* [Java はじめて29 〜JUnitでのテスト駆動型開発6: ファイル読み込みのテスト〜](http://zenryokuservice.com/wp/2019/10/03/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a629-%e3%80%9cjunit%e3%81%a7%e3%81%ae%e3%83%86%e3%82%b9%e3%83%88%e9%a7%86%e5%8b%95%e5%9e%8b%e9%96%8b%e7%99%ba6-%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e8%aa%ad/)
* [Java はじめて30 〜JUnitでのテスト駆動型開発7: テストクラスの実装方法〜](http://zenryokuservice.com/wp/2019/10/04/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a630-%e3%80%9cjunit%e3%81%a7%e3%81%ae%e3%83%86%e3%82%b9%e3%83%88%e9%a7%86%e5%8b%95%e5%9e%8b%e9%96%8b%e7%99%ba7-%e3%83%86%e3%82%b9%e3%83%88%e3%82%af%e3%83%a9/)
* [Java はじめて31 〜JUnitでのテスト駆動型開発8: 処理をつなげたテスト〜](http://zenryokuservice.com/wp/2019/10/05/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a631-%e3%80%9cjunit%e3%81%a7%e3%81%ae%e3%83%86%e3%82%b9%e3%83%88%e9%a7%86%e5%8b%95%e5%9e%8b%e9%96%8b%e7%99%ba8-%e5%87%a6%e7%90%86%e3%82%92%e3%81%a4%e3%81%aa/)