作者jacky951 (蓝忆)
看板java
标题[问题] Swtich 变数宣告的范围
时间Thu Dec 29 10:39:17 2011
版上先进大家好:
今天在写Code的时候刚好想到一个问题关於Switch变数宣告的问题。
在版上/SWITCH 没有找到相关的资讯,所以就大胆的po上来请各位先进解惑了。
就过去在其他语言(需变数宣告)的认知,switch case内有变数宣告如:
int caseInt = 2;
switch (caseInt){
case 1:
int i = 1;
//process;
break;
case 2:
//i = 2; //这行会有不可预期的错。
int j = 2; //重新宣告另一个新的变数处理。
break;
default:
break;
}
像上面int i = 1 ;是没有问题的,但是i = 2 的时候会出现不可预期的问题,
可是当我要将下面的i = 2 改写成int i = 2;的时候,会出现重覆命名的错误讯息出来。
因此当需要新的变数做记录时,就需要int j = 2;去重新找一个变数来使用。
好玩的是,在eclipse里,我程式这样写:
int caseInt = 2;
switch (caseInt) {
case 1:
int i = 1;
System.out.println(i);
break;
case 2:
i = 2;
System.out.println(i);
break;
default:
break;
}
系统确实会run 2的结果出来,并且不会有错误讯息。
这时我有个疑问产生出来,
就是JAVA是否在编译时,会将宣告的变数自动拉到switch的{}区域宣告
因此将int i的位置改到case 2的地方,也就是:
int caseInt = 2;
switch (caseInt) {
case 1:
i = 1;
System.out.println(i);
break;
case 2:
int i = 2;
System.out.println(i);
break;
default:
break;
}
但这个时候上面的 i = 1; 会有〔无法解析成变数〕的错误警告
因此,我想请问版上的先进们,对於这个问题是否有哪个方向让我可以参考参考呢?
其实这个问题有点庸人自扰,正常来说是不会那样写
只是刚好有个变数需要在某几个case里面用到,不重覆宣告写起来就怪怪的
重覆宣告用不同变数又有点言不达意 EX: returnData1,returnData2 (1,2是什麽鬼???)
拉到switch外面宣告感觉又有点不必要,因为只有少部分的case会用到。
一整个就很自残…
还请版上先进给我点指导吧!
--
当你有责任心的时候
你会想把事情做到完
当你有羞耻心的时候
你才会想把事情做到完美
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.71.217.244
1F:→ pzyc79:在外面宣告一个temp; 12/29 15:12
2F:推 PsMonkey:噗... 没想到那个 int i 可以 compile 过 Orz 12/29 15:41
3F:→ jacky951:我有提到 因为只有部分才需要再额外宣告 为了使用一两次 12/29 16:06
4F:→ jacky951:的东西而拉出来外面...有时候判读会有点麻烦... 12/29 16:08
5F:→ Chikei:这种宣告居然是合法的...orz 12/29 16:59
6F:→ Chikei:anyway...用{}在case内新增一个scope就好 12/29 17:03
7F:推 pzyc79:用jad发现compile额外又在case 2:里宣告新变数……好聪明(? 12/29 20:37
8F:→ sbrhsieh:decompile 结果仅供参考,毕竟source->bytecode 不是1对1 12/30 00:30
9F:→ jacky951:嗯!感谢回覆! 12/30 12:44