java - 即使预先初始化,Java的拆分是否会覆盖数组的长度?

标签 java arrays

String [] arr = {" "," "," "," "};  // String arr = new String[4];
String splitThis = "Hello, World, There";
arr = splitThis.split(","); 
arr[3] = "YAY"; 

第四行抛出Array Index Out of bounds Exception。即使数组的长度为 4。 这种情况如何进展?

最佳答案

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

您的代码实际上只是:

String splitThis = "Hello, World, There";
String[] arr = splitThis.split(","); 
arr[3] = "YAY";

一旦您完成了对变量的赋值,它之前的值就不再重要了split方法返回对数组的引用,您将该引用分配给 arr . split方法不知道变量的先前值 - 它完全独立于您之后对值所做的操作 - 因此它不仅仅是填充现有数组的一部分。

如果你想要那种行为,你可以使用这样的东西:

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));

或者您想要一个 List<String>这样您就可以稍后添加项目:

String splitThis = "Hello, World, There";
List<String> list = new ArrayList<>(Arrays.asList(splitThis.split(","));
list.add(...);

关于java - 即使预先初始化,Java的拆分是否会覆盖数组的长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24385050/

相关文章:

java - 安装 Google Maps SDK Beta 3.1.0 时出错 Could not filnd :places-map-sdk-3. 1.0-beta:

java - 从另一个类方法内部调用时无法正确模拟方法调用

Java line.split() 用于返回空字符串的 csv 文件

javascript - 在 JavaScript 中使用数组的高阶函数

java - 为什么 protected 子类的不同包中的其他类私有(private)

java - 放入 util 类的适当方法?

javascript - 如何按 element.name 对 javascript 对象数组进行排序

Java从文件中读取内容到ArrayList(对象)

javascript - 在 react 中按换行符拆分字符串

javascript - 基于嵌套属性过滤数组