【发布时间】:2013-03-08 10:37:41
【问题描述】:
我在 Java (Eclipse) 中发现了一种奇怪的断言行为。简单的例子:如果我执行这个......
public static void main (String[] args) {
assert(getA() == "a") : "Invalid";
System.out.println("Assertion successful!");
}
private static String getA()
{
return "a";
}
...它会告诉我“断言成功!”正如它应该。但是,如果我尝试这个...
public static void main (String[] args) {
assert(getA() + "b" == "ab") : "Invalid";
System.out.println("Assertion successful!");
}
private static String getA()
{
return "a";
}
... 我得到一个 AssertionError。为什么这个 Assertion 不返回 true?
注意:
- 测试时不要忘记在VM参数中添加“-ea”参数! (Eclipse: enable assertions)
【问题讨论】:
-
真正的问题是:为什么第一个 sn -p 不打印“无效”?
-
这与JVM sp00m中的优化有关,在第一种情况下,“a”字面量每个占用相同的内存空间
-
@sp00m:见哈维尔的回答.. 哦,伙计,我最好多睡觉^^
-
如果您认为某些核心 java 函数或库的行为像 assert 一样“奇怪”。这是 99.999% 的时间用户错误:)
标签: java eclipse behavior assertions