断言语句后出现 ArrayIndexOutOfBoundsException

ArrayIndexOutOfBoundsException after assert statement

我有一个 String 数组 tmpString[] tmp = line.split(",");

得到

然后,

我在代码

上得到了java.lang.ArrayIndexOutOfBoundsException: 3
assert tmp.length == 4;
int r = Integer.parseInt(tmp[3]);   ----error line

java.lang.ArrayIndexOutOfBoundsException: 2代码

assert tmp.length == 3;
String name = tmp[2];    -----error line

我认为这个错误不合理。 assert 语句正确通过,.length=4 的数组如何没有索引 3 的元素?谁能告诉我为什么...

如评论所述,这里的问题是您没有激活 JVM 选项中的断言

在命令行中java MyProgram -ea

对于 Eclipse,请参阅 this 答案。

对于 IntelliJ,请参阅 this 答案。

默认情况下,断言是禁用的,您应该使用以下任一命令行开关启用它们:

  • -ea
  • -enableassertions

您可以检查 the documentation 以获得更多包和子包更细粒度的激活。

对于参数或变量验证,您应该使用专用的 Assertion 库或简单地制作您的库。

轻巧流畅的应该是valid4j:

//...
Assertive.ensure(tmp.length == 4, "The split result array must have 4 elements: (%d)", tmp.length);