变量初始化我有一个奇怪的问题.
有以下代码:
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.类代码在这里
我已将你的问题修改为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编译器中.