读书人

java很诡异的一个有关问题

发布时间: 2012-05-13 16:39:43 作者: rapoo

java很诡异的一个问题
在:http://topic.csdn.net/u/20070828/10/7aa61fbc-8575-4212-85c4-582c08f81535.html,看到其中一道题如下:
public class Test {
  public static void main(String[] args) {
    for(int i = 0; i <= 10; i++)
       Integer k = new Integer(i);
    System.out.println( "Java Puzzlers ");
  }
}
,当我把代码拷贝至myeclipse中后,发现编译报错!原因是这句:Integer k = new Integer(i);,
但是当我给for加上大括号时,改成这样:
for(int i = 0; i <= 10; i++) {
  Integer k = new Integer(i);
}
就不会报错了,感觉很纳闷,是JVM在作祟???
大家探讨下,此做何解????

[解决办法]
《java解惑》中有
[解决办法]
牵涉到内存溢出,垃圾回收等问题。
[解决办法]
很有意思
[解决办法]

Java code
        Integer k;        for(int i = 0; i <= 10; i++)             k = new Integer(i);        System.out.println( "Java Puzzlers ");
[解决办法]
所以很多都建议不要去省略大括号,哪怕是循环语句if语句这些语句好变就一条执行语句的时候也不要省略大括号。
[解决办法]
探讨

引用:

《java解惑》中有

看了下这个文档,好像对这个的解释也不是很详细,也是笼统的介绍了下:“Java 语言规范不允许一个本地变量声明语句作为一条语句在 for、wh ile 或 do 循环中重复执行;一个本地变量声明作为一条语句只能直接出现在一个语句块中” ,如果得真的想搞明白此问题,还得好好研究下java规范,JVM等.

[解决办法]
同意ticmy
编译层次的有限优化行为

for(int i = 0; i <= 10; i++) {
Integer k = new Integer(i);
}

对于这种本质上与没有大括号其实没啥区别,但是javac就懒得管这种了
[解决办法]
同8楼,我认为这就是编译器认为你在这种情况下,只能使用一句代码,没有合适的环境来定义“局部变量”。

如果你这样就能通过编译了:
for(int i = 0; i <= 10; i++) new Integer(i);

读书人网 >Java相关

热点推荐