3

在Java中使用数组时我遇到了一些问题。如果我像这样声明一个字符数组,我的程序将抛出异​​常“超出数组范围”:

char[] ipx = {};
for( int i =0; i <= 63 ; i++ ){
ipx[i] = myString.charAt(i);
}

我不知道为什么当我将第一行替换为:

char[] ipx = new char[64];

我认为它们都是正确的,因为我曾经像这样删除新字符串:

String newString = "";

那些有什么区别?非常感谢您提供的任何帮助

4

6 回答 6

4

我不知道为什么当我将第一行替换为:

因为char[] ipx = {};等效于char[] ipx = new char[0]; // zero sized array;
,在后一种情况下char[] ipx = new char[64];,您为数组分配 64 个字符。

于 2013-11-01T20:07:10.110 回答
2

不,它必须在某个时候初始化为一个大小。在您的示例中,您可以只使用: myString.toCharArray();

通常你会使用列表来处理未知大小的东西,然后执行 myList.toArray();

于 2013-11-01T20:07:47.653 回答
1

简而言之,你不应该试图在String和之间画出任何相似之处char[]。它们是Java 中非常不同的生物。

如果您希望访问k数组的元素,您需要确保它k是一个有效的索引(即数组足够大)。零长度数组 ( ) 对于任何元素访问{}都不够大。

于 2013-11-01T20:07:52.280 回答
0

是否可以在没有元素数量的情况下在 Java 中构造数组?

在你的情况下,的,只需更换

char[] ipx = {};
for( int i =0; i <= 63 ; i++ ){
ipx[i] = myString.charAt(i);
}

经过

char[] ipx = myString.toCharArray();

您也可以使用 aArrayList<Character>而无需声明元素的数量。

于 2013-11-01T20:30:52.180 回答
0

如果这样做char[] ipx = {},则意味着您创建了一个参考ipx。与您char* ipx在 C++ 中所做的相同,它是一个指向random address. 为了在其中存储元素,您需要像在 C++ 中那样分配内存,您需要这样做char* ipx = new char[64]。因此,如果你只做char[]ipx = {}which 就相当于char[]ipx = new char[0]在 Java 中。

于 2013-11-01T20:49:57.773 回答
0

是的,java中的所有数组都是基本的数据结构,必须有一个预定义的固定长度。更改长度必然需要创建一个新数组。

如果您想处理大小可变的对象集合,您需要的是 Java 库中的 Collections Object,它比基本数据数组更智能。

尤其是 List 类,ArrayList,将完全按照您的要求执行。它是一个对象列表(而不是数组),并且会在您添加或删除元素时自然地调整大小。

于 2013-11-01T21:11:41.707 回答