String test=null;
test+="abc";
System.out.println(test);
if(null==test)
{
  System.out.println("enter");
}以上代码会输出:
nullabc
enter
String test=null;
test=test+"abc";
System.out.println(test);
if(null==test)
{
  System.out.println("enter");
}以上代码会输出:
nullabc
求助为什么会这样,反编译发现编译时对编译器test+="abc"和null==test做了的优化,我想知道编译器优化的原理的是什么?导致上面两个例子的输出结果不一样。
PS:编译器用的eclipse。

解决方案 »

  1.   

    两个结果都是nullabc
    jdk 1.6
      

  2.   

    实在搞不明白怎么会输出 enter
      

  3.   

    String test=null;
    test+="abc";
    System.out.println(test);
    if(null==test||test.length==0)
    {
      System.out.println("enter");
    }
      

  4.   

    java version "1.6.0_04"
    Java(TM) SE Runtime Environment (build 1.6.0_04-b12)
    Java HotSpot(TM) Client VM (build 10.0-b19, mixed mode, sharing)
      

  5.   

    我的操作平台linux
    jdk版本:java version "1.6.0_26"
    Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
    Java HotSpot(TM) Server VM (build 20.1-b02, mixed mode)两端程序运行结果都是nullabc不知道楼主的问题出在哪里了?我也搞不懂。只能提供我的运行信息供楼主参考了。