- - PR -
条件式中の宣言は、1回の宣言とみなされるかどうか。
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-05-20 18:20
下のようなコーディングを実験してみました。
public class StringTest { public static void main(String[] args) { boolean bol = true; if(bol){ ココ→String string = "hoge"; System.out.println(string); } if(bol){ ココ→String string = "fuga"; System.out.println(string); } } } 2つ以上の条件式があって、条件式ごとに同じ宣言を行っても コンパイルでき、結果が得られました(hoge fuga)。 条件式の中は通るかどうか未確定のために、コンパイラでエラ −が出ないのかと思い、以下の様に条件式の外で宣言をいれて もコンパイルできるだろうと思ったのですが、下の例ではコン パイルできませんでした。 public class StringTest { public static void main(String[] args) { boolean bol = true; ココ→String string; if(bol){ ココ→String string = "hoge"; System.out.println(string); } if(bol){ ココ→String string = "fuga"; System.out.println(string); } } } そういうものだと思えばよいのですが、ちょっと腑に落ちない のです。上の例では大丈夫で下の例でダメなのはナゼなのか教 えていただけないでしょうか? 基本的すぎて申し訳ないのですが、できるだけ理解して勉強し たいと思っていまして投稿させていただきました。 どうか、よろしくお願いします。 | ||||
|
投稿日時: 2004-05-20 18:37
こおしたら、コンパイルとおりませんか?
すぐに人に聞かないで、もっと色々試してみると楽しいと思いますよ。 public class StringTest { public static void main(String[] args) { boolean bol = true; { String string; } if(bol){ String string = "hoge"; System.out.println(string); } if(bol){ String string = "fuga"; System.out.println(string); } } } | ||||
|
投稿日時: 2004-05-20 18:58
変数のスコープ(有効範囲)って奴ですね。
u2airsotさん掲示の2つの例それぞれで、2つのstringという変数のスコープが どこからどこまでなのかを考えてみればいいんじゃないでしょうか?
ごもっともですので、私もヒントだけ。 | ||||
|
投稿日時: 2004-05-20 19:00
ローカル変数にはスコープの概念があります。
{}で囲まれた部分で宣言した変数は{}の中でしか参照できません。 初心者向けの解説本にも詳しく書いてあると思いますよ。 | ||||
|
投稿日時: 2004-05-20 19:16
>スコープ
・・・わかりました。みなさまありがとうございます。 そして、か、かなり恥ずかしいです。火が出そうです。 でも、ほんとにありがとうございました。 >条件式の中は通るかどうか未確定のために、コンパイラでエラ >−が出ないのかと思い・・・略・・・ 全っ然違いますね(^^; そういうものだと思う所でした。ほんとにありがとうございます。 入門書しっかり読みます。 | ||||
1
