呵呵,这就是java智能编译好处。java编译器在编译源代码时会帮你检查“可能的”编程错误。上述变量o在定义的时候没有初始化,而在后面的代码中也“可能”没有被赋值,这种情况实际上是一个不大不小的逻辑错误(你定义的变量不会不赋值就使用吧?)。java编译器会检查到这种错误,并给你提示出来。你可能会问,既然已经用for循环给它初始化了,为什么还提示错误?答案很简单:for循环的条件未必就会被满足啊,即程序“有可能”压根就不进入for循环执行,所以变量o还是有可能没有初始化。