下記のソースで実行結果がfalseになるのは、if (b = false)でbというboolean型の変数にfalseが代入されるので、最終行でfalseが表示されるということであっていますか?
下記のソースで実行結果がfalseになるのは、if (b = false)でbというboolean型の変数にfalseが代入されるので、最終行でfalseが表示されるということであっていますか? でもboolean型の変数にfalseという文字列を代入するってなんか違う気がして教えていただきたいです、、 public class sample1 { public static void main(String[] args) { boolean b = true; if (b = false) System.out.println(b); System.out.println(b); } }
Java・51閲覧
ベストアンサー
>boolean型の変数にfalseという文字列を代入する >ってなんか違う気がして > 確かに違います。 boolean型のtrue/falseは、そのままtrue/falseという値です。 文字列ではありません。 イメージとしては、0または1しか設定できないint型の変数みたいなものです。 たとえば、 int i = 0; System.out.println(i); というコードを実行すると画面に0が表示されますが、ここで表示されているのは文字列の0ではなく数値の0です。 またi = 0で設定しているのも、文字列の0ではなく数値の0です。 で、boolean型というものがなかった時代のプログラミング言語では、int型変数をフラグとして扱っていたんです。 たとえば「0は真、1は偽とする」と決めてしまって、 int i = 1; if (i == 0) { System.out.println("真"); } else { System.out.println("偽"); } みたいに作っていたんです。 ところがこのやり方だと、「0と1のどっちが真でどっちが偽だっけ?」と迷ったり、「Aさんは0=偽、1=真だけど、Bさんは0=真、1=偽でコーディングしてる」と人によって設定が異なったりしてたんです。 そうすると毎回真偽設定を確認する手間が増えたり、真偽設定を逆にコーディングして不具合連発、みたいな問題が起きてたわけです。 「だったら、言語仕様レベルで間違わないようにしちゃった方が楽だよね」ってことでboolean型というものが作られて、設定できる値はtrueとfalseの2つだけ、となっているんです。 これなら「true = 真、false = 偽」と迷うことなく分かりますから。 ということで、boolean型のtrueとfalseはそれ自体がそういう値である、ということを理解してください。
質問者からのお礼コメント
ありがとうございました
お礼日時:1/23 22:42