我有一个奇怪的变量初始化问题。
有以下代码:
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
}
什么???变量被初始化,出了什么问题?
当我将org.junit.Assert.assertFalse
更改为我自己的本地方法时,错误也会消失。
private static void assertFalse(final boolean o) throws Exception
{
}
如果重要的话,我正在使用jdk 1.7.0_51。类代码为here
答案 0 :(得分:5)
我已将您的问题调整为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);
}
}
只有在使用Eclipse Kepler SR1进行编译时才能得到确切的错误;使用javac
进行编译不会重现它。
此外,将org.junit.Assert.assertTrue(boolean b)
更改为略有不同:
错误消失。 assertFalse
具有相同的问题,可能还有真正的Assert
类中的其他方法。
结论:该错误发生在Eclipse编译器中。