stackoverflow和arrayindexoutofbounds有什么不同?

时间:2010-12-13 09:16:38

标签: java arrays stack-overflow

实际上这些看起来应该几乎相同。您正在引用或将数据粘贴到不应该去的地方。

5 个答案:

答案 0 :(得分:3)

在无休止的递归调用期间发生

StackOverflowError。它与数组无关。当您尝试使用超出数组大小的索引时,会出现ArrayIndexOutOfBoundsException

答案 1 :(得分:2)

arrayindexoutofbounds:尝试读取超出数组边界时引发的异常。

stackoverflow:发生堆栈溢出时发出的错误。

答案 2 :(得分:2)

<强>的StackOverflowError:  在JVM(Java Virtual Memory)用完已分配的堆空间时发生。

<强> ArrayIndexOutOfBoundsException异常:  在应用程序尝试访问不属于声明范围的数组索引时发生。

答案 3 :(得分:2)

这两个实际上是非常不同的东西。正如其他人已经提到的,ArrayIndexOutOfBoundsException是当您尝试使用不正确的索引访问数组时发生的异常。这可能是由编程逻辑中的一个非常简单的错误造成的。

StackOverflowError是更低级别的东西。它与数组无关,与其他人所说的相反,与堆无关。尝试用List做这个技巧,你会得到一个OutOfMemoryError。现在它的错误与StackOverflowError类似,而不是ArrayIndexOutOfBoundsException。 OutOfMemoryError和StackOverflowError都表示您的内存不足,仅在不同的段中。堆栈内存的耗尽几乎总是由于无限递归而发生(除非你有一个可笑的长链方法相互调用其中有很多局部变量),并且当你分配太多并保留所有这些时,就会耗尽堆内存引用,所以即使垃圾收集器也无法为你释放一些内存。

因此,当ArrayIndexOutOfBoundsException确实“将数据粘贴到不应该去的地方”时,StackOverflowError和OutOfMemoryError更好地描述为“内存不足以将数据粘贴到”中。

答案 4 :(得分:0)

Arrayindexoutofbounds:您限制变量,例如定义大小为50的数组,如果您想使用该数组的51.元素,则会出现此异常。

Stackoverflow:想想你没有限制你的变量,例如;

List myList = new List();

您要在此列表中添加元素。

myList.add(something);

如果你添加太多的元素,你的堆内存不能分配更多的空间来保存你的变量,它会抛出异常。

首先你的限制是50,在51你得到一个例外,在第二个你没有得到51.元素的例外,如果你的堆足够免费但你可以在你的堆不够时得到一个例外。