在你要用到myString以前,必须保证myString会被初始化.
if..else..可以保证,if就不可以

解决方案 »

  1.   

    因为第二段的
         if (x > 100) myString = "x is greater than 100";
    else myString = "fdfdf";
    if+else组合保证了不管x取什么样的值,myString都可以得到赋值,所以不会报错按你的程序,其实第三段也可以保证不管x取什么值,myString也可以得到赋值,但这种结构编译器应该是没有办法估计你的if所覆盖的范围的,如果在中间加一句,变成:
         if (x < 100) myString = "x is less than 100";
             x = 90;
             if (x >= 100) myString = "x is greater than 100";
    这样的话,myString就有可能漏过去
      

  2.   

    对于变量应该在定义时最好需要进行初始:
    String myString = "";
    如果只有if没有else,则编译器会认为myString的赋值可能没有进行。
      

  3.   

    编译器只能进行语法检查,不能进行语义检查
    当同时使用if和else时,必然保证myString被初始化,但用两个if则未必.
      

  4.   

    class Test
    {
      public static void main(String[] args)
      {
         String myString;//这里没有初始化,这个你明白
         int x = 100;
        
         if (x < 100) myString = "x is less than 100";
             if (x > 100) myString = "x is greater than 100";

         System.out.println(myString.length());
      }
    }
    程序这样的时候会保:局部变量没有初始化的编译错误.但是象下面这样:
    class Test
    {
      public static void main(String[] args)
      {
         String myString;//查找下面有没用初始化,运行下去
         int x = 100;
        
         if (x < 100) myString = "x is less than 100";//这个不成立

         if (x > 100) myString = "x is greater than 100";//这个不成立
    else myString = "fdfdf"; //初始化了,其实系统就这样默认怎么都有初始化
         System.out.println(myString.length());//发现上面初始化了,不报错
      }
    }
    程序可以正常编译运行!然后再改一个条件变成下面这样:
    class Test
    {
      public static void main(String[] args)
      {
         String myString;
         int x = 100;
        
         if (x < 100) myString = "x is less than 100";//系统会认为这两个条件不成立
             if (x >= 100) myString = "x is greater than 100";//那么myString就没有初始化

         System.out.println(myString.length());
      }
    }
    同样会报没有初始化的错误,为什么第二段就不算没有初始化呢???????那位高手能够讲讲具体的道理!谢谢
    //要知道编译器只是进行编译,不是进行运行,她有其内部检测机制,那些if什么的,她不管你成不成立
    //她假设了你成立或者不成立,就这个道理.编译器假设你的俩个if都没成立,那么你就没初始化
      

  5.   

    正确。因为if else能保证被初始化。而多个if语句,虽然理论上是保证初始化了。
    但是编译器还是不能判断出来的。
      

  6.   

    String myString = "";myString = (x < 100) ? "x is less than 100" : "x is greater than 100";
      

  7.   

    classjava(原始野人)
    要奔星?
    那照顾一下多给点分?
      

  8.   

    因为第2段mystring被初始化为"fdfdf"
      

  9.   

    classjava(原始野人)
    要奔星?
    那照顾一下多给点分?全部给他我没意见
      

  10.   

    classjava(原始野人)
    要奔星?
    那照顾一下多给点分?全部给他我也没意见还差多少呢
      

  11.   

    应该说这是java编译器的一个bug.