int i;
int x = 3;
int y = 2;
if( x > y )
{
       i = 20;
}
int j = i;
System.out.println( j);//这里的 i 编译器提示未定义,这段程序在 C C++中运行完全没有任何问题,为什么在 java 中就不可以??

解决方案 »

  1.   


    int i;
    int x = 3;
    int y = 2;
    if (x > y) { //运行时判断
    i = 20;
    }
    int j = i;
    i是在运行时完成初始化的,在编译期,i没有完成初始化
      

  2.   

    有点明白,那C++ 在这一方面跟java不同是吧?
      

  3.   

    你那个是当x>y时才会初始化啊,但是编译时,他认为这个条件有可能不成立,所以他报没有初始化啊
      

  4.   

    那当时java大神们在考虑这个问题是,为什么没有沿用 C 或 C++ 在编译时就判断呢??
      

  5.   

    java的局部变量必须初始化,类成员变量有虚拟机进行初始化。
      

  6.   

    i 没有赋初值,解决方法:
    (1)初始化
    (2)把 i 改为成员变量 c/c++ 里边系统会自动赋初值,所以可以用,
    但java 除非是成员变量,否则不会自动赋初值
      

  7.   

    你的if条件都不成立,所以那句根本不执行,i还是未赋值
      

  8.   

    未初始化,因为编译时候进行检查,编译器并不知道x会大于2的 在C/C++里面默认初始化。
      

  9.   


    int i;
    final int x = 3;
    final int y = 2;
    if( x > y )
    {
      i = 20; 
    }
    int j = i;
    System.out.println( j);将x,y设置为常量.就可以条件编译.
      

  10.   


    如果X<=y你让J输出什么??
    你自己知道X>Y可是,计算机知道吗?
      

  11.   

    c/C++语法会严格很多,需要自己处理很多东西比如内存释放。Java是完全面向对象的,写起来相对轻松