public class test{
public static void main(String[] args){
int a;
int x=1;
if(x>1) a = 10;
System.out.println(a); /*  换上这段就可以。。
if(true) a = 10;
System.out.println(a);
*/
}
}
编译报错,说是尚未初始化变量,但是换上注释里的就可以
刚学java,觉得这两段语法结构差不多啊,请高手解答,越详细越好

解决方案 »

  1.   

    初始化是指声明变量类型并赋值,楼主给出的例子中if(x>1) a = 10;System.out.println(a); 因为x等于1并不大于1,a=10并不会被执行,也就是说a并不会被赋值,此时变量未完成初始化。而换上if(true) a = 10;System.out.println(a);因为a=10会被执行/*if(true)永远成立*/,此时a被赋值,变量完成初始化。
      

  2.   

    初始化是指声明变量类型并赋值,楼主给出的例子中if(x>1) a = 10;System.out.println(a); 因为x等于1并不大于1,a=10并不会被执行,也就是说a并不会被赋值,此时变量未完成初始化。而换上if(true) a = 10;System.out.println(a);因为a=10会被执行/*if(true)永远成立*/,此时a被赋值,变量完成初始化。
      

  3.   

    改成
    if(x>1){
     a = 10;
    System.out.println(a); 
    }
      

  4.   

    并非是编译器或方法体的问题,楼主可试着把if(x>1) a = 10;System.out.println(a); 改成if(x == 1) a = 10;System.out.println(a); 就会发现程序可以正常运行
      

  5.   

    额,抱歉,写错了
    public class test{ 
    public static void main(String[] args){ 
    int a; 
    int x=2; --此处改正
    if(x>1) a = 10; 
    System.out.println(a); /*  换上这段就可以。。 
    if(true) a = 10; 
    System.out.println(a); 
    */ 


    x等于多少不重要,只要第一段的“判断语句”不是直接写TRUE,就会有这个问题。
      

  6.   

    搂主的代码习惯不好。if(x>1) a = 10; 
    System.out.println(a); 
    这样的话(x>1)有可能不成立,a = 10;不一定执行。if(true) a = 10; 
    条件一定成立,a = 10; 一定执行。就是这个区别
      

  7.   

    [size=10px][size=16px]程序中无论if是否成立   System.out.println(a); 都会被执行
    而一旦if不成立  则a没有初始化  编译器就是检查出有产生这种错误可能所以报错
    [/size][/size]
      

  8.   

    程序中无论if是否成立  System.out.println(a); 都会被执行 
    而一旦if不成立  则a没有初始化  编译器就是检查出有产生这种错误可能所以报错