Java: 为什么编译器会在这里报错?

Java: Why does the compiler complain here?

  0          int specialFuncStart;
  1          String[] specialFunctions= {"sum","ddx","integral"};
  2          for(String element: specialFunctions){
  3              specialFuncStart = finalMath.lastIndexOf("sum");
  4          }
  5          while (specialFuncStart != -1) {   code  }

为什么line 5specialFuncStart可能没有初始化?字符串是最终的和固定的,所以 for 循环总是 运行。编译器不知道还是我遗漏了什么?我知道初始化 specialFuncStart = -1; 是如何修复它的,但为什么?

声明它但没有初始化它。您需要为其设置一个值:

int specialFuncStart; // declare
specialFuncStart = 0; // initialize

int specialFuncStart = 0; // both

您的编译器认为有时 specialFuncStart 不会被初始化,因为 for 循环 不必 执行。

编译器显示错误,因为您在 for 循环中初始化了特殊的 FuncStart 变量,编译器不确定它是否执行,因为 for-each 循环数组大小可以为 0,这使得它不执行。

所以你在 for 循环之前初始化它以防止错误

specialFuncStart = 0;

在 while 循环中,您使用在另一个循环范围内初始化的变量检查条件。考虑到它可能无法正确初始化、循环可能不会 运行 或者它可能会提前中断等情况,编译器不会让您这样做,即使从我们的角度来看事件会完美发生也是如此。 问题出在作用域上,Java 是一种健壮且强类型的语言,它的编译器会检查每一种可能性以防止发生意外。