gpt4 book ai didi

java - 奇怪的变量初始化错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:27:46 24 4
gpt4 key购买 nike

我有一个关于变量初始化的奇怪问题。

有如下代码:

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。类(class)代码是here

最佳答案

注意:现在报告为 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);
}
}

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

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

  • 包名;
  • 类名;
  • 方法名;
  • 方法签名

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

结论:bug在Eclipse编译器中。

关于java - 奇怪的变量初始化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21283867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com