inf*_*ous 1 java string initialization
我使用以下代码获取"本地变量字符串可能尚未初始化"错误.代码本身没有意义,它只是为了锻炼而编写的.
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
}
}
Run Code Online (Sandbox Code Playgroud)
为了使其正常工作,初始化String就足够了,如上面的注释中所表达的那样.
我的问题是为什么需要它?该方法println永远不会被赋予null,并且在循环中的条件第一次返回true时将发生初始化.我做错了什么或只是Java对程序员的错误过于谨慎?如果是后者,从理论的角度来看,它是如何合理的呢?
我的问题是为什么需要它?
因为即使您的代码是"逻辑"编写的,因此string确实会在循环中初始化,编译器也不知道它.它看到的只是:
for (loop; elements; here)
if (someCondition)
string = something;
Run Code Online (Sandbox Code Playgroud)
简而言之:编译器不会检查代码的逻辑; 它只有足够聪明才能检查语法错误,但在此之后,字节码生成本身就是"哑".
并且由于Java要求在使用之前初始化所有变量,因此会出现此编译器错误.