两者有什么区别
String [] O = {};
和
String[] Ox = new String[3000];
如何将字符串从Ox
复制到O
?
O
是空数组,Ox
有 3000 个长度,要将Ox
复制到O
您必须使用Arrays
类copyOf()
API。
O = Arrays.copyOf(Ox, Ox.length);
创建Arrays.copyOf()
,将O
数组长度更改为3000
并复制所有内容。
public static void main(String[] args) {
String [] O = {};
String[] Ox = new String[3000];
O = Arrays.copyOf(Ox, Ox.length);
System.out.println("O array length : "+O.length); // I am just printing length
}
输出:
O array length : 3000
数组类的copyOf(( api的内部实现。
public static char[] copyOf(char[] original, int newLength) {
char[] copy = new char[newLength];
System.arraycopy(original, 0, copy, 0,
Math.min(original.length, newLength));
return copy;
}
Array
是immutable
所以你不能3000 size array
分配给size 0 array
,在copyOf()
方法的实现中,java创建新的数组char[] copy
并使用native
方法将original
数组的内容复制到copy
数组中。
因此,在您的代码中,您不能直接Ox
数组内容复制到数组O
因为您必须创建大小为 3000 的数组或使用 Java copyOf()
api。
在 Java 中,数组是不可变的,因此您无法更改数组的大小。因为您隐式将 O 声明为大小 0({} 表示其为空(,因此无法填充。
您需要声明一个大小为 3000 的新数组(new String[3000](,然后使用它
O
是一个空数组,因此您无法向其复制任何内容。
使用以下语句声明一个空的表 O(size=0,无元素(。
String[] o = {};
相反,如果您编写:
String[] o = {"this", "is", "a", "test"};
您已将表 O 初始化为 size=4,并包含四个字符串元素"this"、"is"、"a"和"test"。
最后,如果按以下方式初始化表:
String[] o = new String[4];
您已声明数组的 size=4,但所有四个元素均为 null。当然,您可以稍后更改数组的值(例如。 o[3] = "test"
(。
现在,如果要将一个数组的元素复制到另一个数组,可以使用Arrays.copyOf(o, o.length);
方法,但要按以下方式:
String[] o = {"this", "is", "a", "test"};
String[] copy; // you don't have to (and shouldn't) initialize this variable to {}
copy = Arrays.copyOf(o, o.length);
这里有几个区别:
1( 字符串 [] O = {};
这意味着创建一个名为 O
的新String[]
,该使用 {}
中包含的数据集进行初始化。 由于没有数据,O是">空的"。
这意味着O.length = 0
,或者换句话说,此阵列没有与之关联的内存用于存储目的。
由于数组在 Java 中是不可变的,因此您无法对此数组执行任何进一步操作。
你本可以做到:
String[] O = {"bob","Cat","ralph"}
O.length // == 3
O[0] // bob
O[1] // Cat
O[2] // ralph
O[1] = "Sting"
O[1] // now set to Sting
O[4] = "Cause an Exception" // causes an index out of bounds exception
2( String[] O = new String[3000];
在本例中,您创建了一个具有 3000 个可用"空格"或"索引"的新String[]
。 这真正意味着您可以维护对此数组中 3000 个 String 对象的引用。
所以:
O.length; //3000 because that is the length of this array
O[0] // will return null since we have not stored anything here
O[0] = "My String"
O[0] // now equals "My String"
O[3001] // throws an index out of bounds exception
3(如何在它们之间复制:
简而言之,在这种情况下你不能。 由于数组 1 (String[] O = {}
( 为空且长度为 0,因此任何复制到该数组或从该数组复制的尝试都将导致异常。
谢谢大家 - 为我带来一些新信息 -但
O = Arrays.copyOf(Ox, Ox.length);
与阿蒂什·辛皮相比
有助于解决问题:)(