- PR -

条件式中の宣言は、1回の宣言とみなされるかどうか。

1
投稿者投稿内容
u2airsot
会議室デビュー日: 2004/05/13
投稿数: 13
投稿日時: 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);
}
}
}

そういうものだと思えばよいのですが、ちょっと腑に落ちない
のです。上の例では大丈夫で下の例でダメなのはナゼなのか教
えていただけないでしょうか?
基本的すぎて申し訳ないのですが、できるだけ理解して勉強し
たいと思っていまして投稿させていただきました。
どうか、よろしくお願いします。
zaxx_MD
大ベテラン
会議室デビュー日: 2003/04/21
投稿数: 204
お住まい・勤務地: 千葉県柏市
投稿日時: 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);
}
}
}
Cluster
ぬし
会議室デビュー日: 2003/03/06
投稿数: 289
お住まい・勤務地: 大阪
投稿日時: 2004-05-20 18:58
変数のスコープ(有効範囲)って奴ですね。
u2airsotさん掲示の2つの例それぞれで、2つのstringという変数のスコープが
どこからどこまでなのかを考えてみればいいんじゃないでしょうか?

引用:

すぐに人に聞かないで、もっと色々試してみると楽しいと思いますよ。


ごもっともですので、私もヒントだけ。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2004-05-20 19:00
ローカル変数にはスコープの概念があります。
{}で囲まれた部分で宣言した変数は{}の中でしか参照できません。
初心者向けの解説本にも詳しく書いてあると思いますよ。
u2airsot
会議室デビュー日: 2004/05/13
投稿数: 13
投稿日時: 2004-05-20 19:16
>スコープ
・・・わかりました。みなさまありがとうございます。
そして、か、かなり恥ずかしいです。火が出そうです。
でも、ほんとにありがとうございました。

>条件式の中は通るかどうか未確定のために、コンパイラでエラ
>−が出ないのかと思い・・・略・・・
全っ然違いますね(^^;
そういうものだと思う所でした。ほんとにありがとうございます。
入門書しっかり読みます。
1

スキルアップ/キャリアアップ(JOB@IT)