实际上这些看起来应该几乎相同。您正在引用或将数据粘贴到不应该去的地方。
答案 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.元素的例外,如果你的堆足够免费但你可以在你的堆不够时得到一个例外。