当前位置: 代码迷 >> J2SE >> 在嵌套语句块中局部变量的初始化有关问题
  详细解决方案

在嵌套语句块中局部变量的初始化有关问题

热度:2   发布时间:2016-04-23 20:09:14.0
在嵌套语句块中局部变量的初始化问题!
import java.util.Arrays;


public class Sample6_11
{

public static void main(String[] args)
{
int i = 0, x = 90, y = 50;
if (x > y)
{
i = 10;
}
System.out.println(i);

}

}

import java.util.Arrays;


public class Sample6_11
{

public static void main(String[] args)
{
int i, x = 90, y = 50;
if (x > y)
{
i = 10;
}
System.out.println(i);

}

}


为什么局部变量i如果没有初始化,那么System.out.println(i);就因为i没有初始化而不能通过编译?
但是如果把i初始化为任意一个值,比如i = 0;那么System.out.println(i);打印出的不是0而是10?
------解决思路----------------------
java规定所有使用的变量都要初始化,否则会出现编译期错误。
i的作用域是在main方法内包含了if代码块,在if里面操作也会改变i的值。
------解决思路----------------------
java局部变量不会自动初始化,你必须告诉编译器这个变量的初始值。
你在 if 语句里面给 i 赋了值,但编译器是不知道你的程序是否会跑到 if 语句里面的(只有运行时才知道),所以到 System.out.println(i); 时 i 没有赋过值,编译不通过;
除非你在 else 里面再给 i 赋值,那边编译器会认为你在 if...else 里面始终会给 i 赋值,所以到 System.out.println(i); 时 i 肯定已经赋过值,编译通过。
------解决思路----------------------
编译器不知道i会不会被赋值.