Я нашел странное поведение утверждений в Java (Eclipse). Простой пример: если я выполняю это ...Странное поведение утверждений в 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. Почему это утверждение не вернулось?
Примечание:
- Не забудьте добавить "-EA" Parameter в аргументах VM при тестировании! (Eclipse: enable assertions)
http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java – assylias
Реальный вопрос: почему первый снипп не распечатывает «Invalid»? – sp00m
Это связано с оптимизацией в JVM sp00m, в первом случае буква «a» занимает одно и то же пространство памяти – Cruncher