在:http://topic.csdn.net/u/20070828/10/7aa61fbc-8575-4212-85c4-582c08f81535,看到其中一道题如下:
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语句这些语句好变就一条执行语句的时候也不要省略大括号。
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
同意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);