我收到以下代码的“本地变量字符串可能尚未初始化”错误。该代码本身是没有道理的,仅出于练习目的而编写。
public class StringExercise
{
public static void main(String[] args)
{
String string; // initializing here fixes the issue
for (int i = 0; i < 10; ++i)
{
if( (i % 4) == 2 )
{
string = "Number: " + i;
}
}
System.out.println(string); // this is marked as wrong by Eclipse
}
}
为了使其正常工作,初始化上面的注释中表示的String就足够了。
我的问题是为什么需要它?该方法println
永远不会被赋予null,并且初始化将在循环中的条件首次返回true时进行。我是在做错什么,还是Java对程序员的错误过于谨慎?如果是后者,那么从理论角度来看又有何道理呢?
我的问题是为什么需要它?
因为即使您的代码是“逻辑上”编写的,因此string
确实可以在循环中进行初始化,但编译器也不知道。它所看到的是:
for (loop; elements; here)
if (someCondition)
string = something;
简而言之:编译器不会检查代码的逻辑;它只足够聪明以检查语法错误,但是在那之后,字节码生成本身就是“哑巴”。
并且由于Java要求在使用之前初始化所有变量,因此会出现此编译器错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句