こんにちは、現役SEの「とも」です。
今回は、「真偽型」について書いていきたいと思います。
【真偽型】
真偽型とは、true(真)、false(偽)の2種類の値のみ設定できるデータ型です。
Javaの基本データ型としての真偽型は、以下のようにboolean型だけとなります。
型 | 必要なメモリサイズ | 説明 |
---|---|---|
boolean | 不明 | 条件判定に利用される型 |
※色の付いてる行は、使用頻度の高いデータ型です。
boolean型は、明確に〇バイトという定義が記されているものはないと思われます。
そのため、JavaはOSに依存しない形で作られているので、OSによって異なるバイト数であることが考えられます。(あくまで私の憶測です)
例えば、64ビットOSのPCがあったとして一番効率がいいのが「8バイト単位」の処理です。
64ビット(8バイト)を一斉に処理できるのが64ビットOS(PCが64ビットマシンの前提)なので、64ビットOSでは1バイトの処理を行う場合、以下のような余分な処理が発生します。
①8バイトで処理
②8バイトを1バイトに変換
③1バイトデータを処理
そのため、そのOSで最も効率の良いバイト数で処理している可能性が高いです。
もっとも、通常のプログラマーはbooleanのバイト数に関しては考慮はしなくても問題ありません。
ゲームなどの相当に厳しいメモリの制約がある場合は、1ビットを真偽の判定の単位にすることで使用メモリを減らす効果がありますが、
- 取り扱いが複雑になる
- 1ビット毎に真偽を判定する場合はbooleanよりも余計な処理が発生するため処理速度が落ちる
といったことがあります。
※複数ビットを1回の処理でまとめて判定する場合は早くなります。
- 通常の業務系のプログラムでは、「真偽の判定はboolean型を使用する」と覚えておけばいいでしょう。
boolean型の使用例としては、以下のようにフラグとして利用することが多いです。
下の例では、fullNameのフラグがtrueなら「フルネームを出力」、falseなら「苗字のみ出力」といった使い方ですね。
boolean fullName = true;
if( fullName ){
System.out.println("山田 太郎");
}else {
System.out.println("山田");
}
また、下のように条件判定が複雑で長くなる場合の中間値として使用されることもあります。
※複雑なものを分けておくと、バグがあったとき原因を突き止めるのが楽になることがあるし、単純に見やすくなります。
boolean cond1;
boolean cond2;
cond1 = (input_name == "山田 太郎") && (input_seibetsu == "男")
cond2 = (input_address == "東京都") && (input_type == "会社員")
if( cond1 && cond2 ){
System.out.println("東京在住の男性会社員 山田 太郎さん");
} else {
System.out.println("その他の人");
}
if文や&&の論理演算子については、別のブログで書きますので現時点で意味が分からなくても問題ありません。