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
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • codeaftercode 2022-10-27 10:46
    关注

    编译器的检测机制造成的,在它看来那个for循环是有可能不执行的,因为它在做检测时不会真的去执行i<arr.length看条件是不是真、循环体中的min=xxx会不会执行,它就做简单的判断,即for循环可能会执行,也可能不会执行。那么min就存在未被初始化这种可能性,所以会报错。
    一般来说编程规范也会要求声明变量时直接赋初值,以防万一嘛

    评论 编辑记录
  • CSDN-Ada助手 CSDN-AI 官方账号 2022-10-27 12:37
    关注
    评论
查看更多回答(2条)

报告相同问题?

问题事件

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

悬赏问题

  • ¥40 找同学帮敲Python代码
  • ¥15 MYSQL 订单的商品明细重复计算问题
  • ¥15 微信实时共享位置修改
  • ¥100 TG的session协议号转成直登号号后客户端登录几分钟后自动退出设备
  • ¥50 共模反馈回路的小信号增益
  • ¥15 arduino ssd1306函数与tone函数放歌代码不兼容问题
  • ¥70 0.96版本hbase的row_key里含有双引号,无法deleteall
  • ¥15 诊断性META分析合并效能的检验
  • ¥15 请问abb根据色块判断奇偶数并根据批次号放入仓储
  • ¥66 开发PC客户端一定也要开发上位机吗?