奇怪的变量初始化错误

mic*_*nko 7 java eclipse

变量初始化我有一个奇怪的问题.

有以下代码:

public void test()
    {
        StringBuilder buf;

        org.junit.Assert.assertFalse((buf = new StringBuilder("qwe3")).toString().isEmpty());
        org.junit.Assert.assertEquals("", buf.toString()); // The local variable buf may not have been initialized
    }
Run Code Online (Sandbox Code Playgroud)

什么???变量被初始化,出了什么问题?

当我org.junit.Assert.assertFalse改为我自己的本地方法时,错误消失了.

private static void assertFalse(final boolean o) throws Exception
    {

    }
Run Code Online (Sandbox Code Playgroud)

如果重要的话,我正在使用jdk 1.7.0_51.类代码在这里

Mar*_*nik 5

注意:现在报告为Eclipse JDT Bug 426443.

我已将你的问题修改为MCVE:

package org.junit;
public class Assert {
  public static void assertTrue(boolean b) {}
}

package test;
import static org.junit.Assert.assertTrue;
public class Test {
  void test() {
    int i;
    assertTrue((i = 1) == 1);
    assertTrue(i == 1);
  }
}
Run Code Online (Sandbox Code Playgroud)

只有在使用Eclipse Kepler SR1进行编译时才能得到确切的错误; 编译时javac不会重现它.

另外,org.junit.Assert.assertTrue(boolean b)改为略有不同:

  • 包裹名字;
  • 班级名称;
  • 方法名称;
  • 方法签名

错误消失了.assertFalse有同样的问题,可能在真正的Assert类中的其他方法.

结论:该错误在Eclipse编译器中.