2010年10月6日水曜日

I can't Understand



class OperatorTest01A {
    public static void main(String[] args){
        int a = 8;
        int b = 2;
        
        System.out.println("a + b = " +  a + b  );
  }
}
のコンパイル結果が82です。
なぜですか!?
教えて下さい!

4 件のコメント:

  1. a+bの部分を()でくくってみては?

    返信削除
  2. ありがとうございます!

    返信削除
  3. 理由の説明は無いようでしたので,説明を.Javaでは,+は足し算の意味だけではなく,文字列同士をつなげる,という意味があります.また,文字列が必要な部分では,自動的にtoString()メソッドを呼び出して,文字列に変換する,という機能もあります."a + b" + a + bは,まず"a + b = " + aが処理されます.ここで,前に文字列が来ているので,これは文字列の連結だ,と解釈され,a.toString()で文字の8に変換され,"a + b = 8"になります.bについても同様です.(a + b)とすると,先にa + bが処理され,こちらは整数同士なので,整数の足し算として処理され,その後文字列の連結として処理されるので正しく表示されるわけです.このあたりは,演算子の優先度,などを調べておくと良いでしょう.

    返信削除
  4. そうだったんですか。詳しい説明ありがとうございました。

    返信削除