m0_73997865 2022-10-27 10:35 采纳率: 100%
浏览 42
已结题

关于Java变量初始化

想请教,若是局部变量一开始宣告时未初始化,
但在for循环中有给予该变量初始化值,循环时也有赋值给该变量,且在循环中也可以打印出该变量,为何出循环后又会跳出该变量未初始化的编译错误讯息呢?
在for循环内不是已初始化并赋值给该变量了吗?

如下例:

public static void main(String args[]){

int arr[]={40,30,20};
int min;

for(int i=0;i<arr.length;i++)
{
  min=arr[i];
   for(int j=i+1;j<arr.length;j++)
    {
      if(arr[j]< min)
     {
        min=arr[j];
      }
     }
  System.out.println(min); //在for循环中min值打印的出来
}

System.out.println(min); //但若在此打印则会显示min未初始化的编译错误

再麻烦各位神人解惑了!

  • 写回答

3条回答 默认 最新

  • 於黾 2022-10-27 10:43
    关注

    因为这里涉及到图灵停机问题,编译器不可能在不真正执行一遍代码就判断一个循环是否能够停下来,而一旦真正执行它自己又会可能会陷入死循环无法停下来,所以在编译阶段是根本没法判断一个循环到底会不会执行的
    既然循环可能不会执行,那么你在循环里写的赋值就不算数,必须在代码能够检测到的位置赋值才算数

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月5日
  • 已采纳回答 10月28日
  • 创建了问题 10月27日