断言语句后出现 ArrayIndexOutOfBoundsException
ArrayIndexOutOfBoundsException after assert statement
我有一个 String
数组 tmp
由 String[] 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);
我有一个 String
数组 tmp
由 String[] 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);