将Java';s split是否覆盖数组的长度,即使它已预初始化?

将Java';s split是否覆盖数组的长度,即使它已预初始化?,java,arrays,Java,Arrays,第四行抛出数组索引越界异常。即使数组的长度为4。 在这种情况下如何处理?不,数组的长度不是4。数组的长度为3,因为它是拆分操作的结果 您的代码实际上只是: String [] arr = {" "," "," "," "}; // String arr = new String[4]; String splitThis = "Hello, World, There"; arr = splitThis.split(","); arr[3] = "YAY"; 一旦你给一个变量赋值,它以前的值

第四行抛出数组索引越界异常。即使数组的长度为4。 在这种情况下如何处理?

不,数组的长度不是4。数组的长度为3,因为它是拆分操作的结果

您的代码实际上只是:

String [] arr = {" "," "," "," "};  // String arr = new String[4];
String splitThis = "Hello, World, There";
arr = splitThis.split(","); 
arr[3] = "YAY"; 
一旦你给一个变量赋值,它以前的值就不重要了。
split
方法返回对数组的引用,您将该引用分配给
arr
split
方法不知道变量的前一个值-它完全独立于您随后对值所做的操作-因此它不仅仅是填充现有数组的一部分

如果你想要这种行为,你可以用这样的方式:

String splitThis = "Hello, World, There";
String[] arr = splitThis.split(","); 
arr[3] = "YAY";
或者,您可能需要一个
列表
,以便以后可以添加项目:

String[] array = { " ", " ", " ", " " }; // Or fill however you want
String splitThis = "Hello, World, There";
String[] splitResults = splitThis.split(",");
System.arraycopy(splitResults, 0, array, 0,
                 Math.min(array.length, splitResults.length));
String splitThis=“你好,世界,那里”;
List List=newarraylist(Arrays.asList(splitThis.split(“,”));
添加(…);
这将创建一个新数组,并将其分配给覆盖先前初始化数组的arr变量

String splitThis = "Hello, World, There";
arr = splitThis.split(","); 

arr[3]
将引发异常。

新数组的长度将仅为3。旧数组将无效。尝试写入此新数组的位置4将超出范围并导致异常


您必须先将数组项添加到
列表中
,然后才能添加新项。

您意识到
split()
返回一个完全不同的数组,对吗?因此
arr
指向与原始数组不同的数组。分配数组变量不会写入数组;它会将变量指向新数组。谢谢,我没有意识到这一点。因此,如果我想添加更多数据,如数组第三个索引中的日期,我可以这样做吗?@user3759100:无法将任何内容添加到
split
返回的数组中,因为数组的长度是固定的-一旦创建了数组,无论它来自何处,都无法将其添加到数组中。也许您想要一个
列表
?@JonSkeet
array.max()有多么美妙的用途
!+1当然!@shekharsuman:哎呀,应该是
Math.min
,而不是
Math.max
!@JonSkeet-hahahaha!!!抱歉,Math.max()第一次通知!我也指出了错误,抱歉!
String splitThis = "Hello, World, There";
arr = splitThis.split(","); 
arr[0] = "Hello"
arr[1] = " World"
arr[2] = " There"