Seb*_*iot 7 java jvm indexoutofboundsexception
这有点奇怪,但代码说的多于单词,所以看看测试看看我在做什么.在我当前的设置(Windows 64位上的Java 7更新21)中,此测试因ArrayIndexOutOfBoundsException而失败,但是将测试方法代码替换为注释代码,它可以正常工作.我想知道Java规范中是否有任何部分可以解释原因.
在我看来,正如"michael nesterenko"建议的那样,在调用方法之前,数组字段的值被缓存在堆栈中,并且在从调用返回时不会更新.我不知道它是JVM错误还是记录在案的"优化".没有涉及多线程或"魔术".
public class TestAIOOB {
private String[] array = new String[0];
private int grow(final String txt) {
final int index = array.length;
array = Arrays.copyOf(array, index + 1);
array[index] = txt;
return index;
}
@Test
public void testGrow() {
//final int index = grow("test");
//System.out.println(array[index]);
System.out.println(array[grow("test")]);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
190 次 |
| 最近记录: |