Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー

boolean型

class Bool {   static boolean b;   public static void main(String [] args) {     int x=0;     if (b ) {       x=1;     }     else if (b = false){       x=2;     }     else if (b){       x=3;     }     else {       x=4;     }     System.out.println("x = " + x);     System.out.println(b=false);   } } SUNのサイトにあった「どのような結果になるか」と言う問題なのですが、8行目の if(b=false) の部分がifの括弧の中はBoolean型じゃないといけないのに 代入してるからコンパイルエラーだなとおもったのですが あっさりコンパイルは通ってx=4と言う出力です・・・ (b=false) と言うのはどのようにコンパイルされているのですか?? なぜ 代入が、BooleanとしてOKなのでしょうか??

質問者が選んだベストアンサー

  • ベストアンサー
  • kmb01
  • ベストアンサー率45% (63/138)
回答No.4

=演算子は値を返します。 例えばa=b=100;と書いた場合、 最初にb=100が評価されbに100が代入された後、この部分の評価値として100が返され、 次の=を評価するころにはa=100;と書かれたのと同じになっています。 上の例ではif(b=false)の部分はbにfalseを代入した後、 この部分の評価値としてfalseを返し、if(false)と書かれたのと同じになります。

azicyan
質問者

お礼

よくわかりました! とてもわかりやすいです。 助かりました! ちょっと理解が足りませんでした。

すると、全ての回答が全文表示されます。

その他の回答 (3)

noname#10813
noname#10813
回答No.3

あっ#1です。 書き忘れました。(^_^; ... else if ( b == false ) { .... ... と"="を2つ書かないと比較演算してくれません。

azicyan
質問者

お礼

比較演算をしたい場合は、と言うことですね! (つまりfalseかtrueかを調べたいとき) で、この問題は、 では代入するとどうなるか? と言う理解力を試した問題だったようですね。 ありがとうございました。 何とかわかりました!

すると、全ての回答が全文表示されます。
  • guruguru2
  • ベストアンサー率29% (39/132)
回答No.2

else if (b = false) は判定文なので、(b = false) = True という意味なのでは?       

azicyan
質問者

お礼

回答ありがとうございます。 そういうふうに補完されてコンパイルされているのかも・・・??

すると、全ての回答が全文表示されます。
noname#10813
noname#10813
回答No.1

文頭のstaticは別に定数を定義しているわけではないので、(b=false)だと、変数bにfalseが代入されていることになり、当然"true"ではないので、xに4が入ると考えられます。

azicyan
質問者

お礼

ありがとうございます ちょっと頭が固くなっています(*_*) たとえば(x=4)などとやると 期待値Booleanなのにintがきた、と言うようなコンパイルエラーがでますよね? なので、(b=false)も代入だから・・・と思ってしまいました・・・ 考えてみたらbに代入したあと、boolean型なんだから、よさそうですね。

すると、全ての回答が全文表示されます。

関連するQ&A