这两个字符串数组命令有什么区别



两者有什么区别

String [] O = {};

String[] Ox = new String[3000];

如何将字符串从Ox复制到O

O

空数组,Ox有 3000 个长度,要将Ox复制到O您必须使用ArrayscopyOf() 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;
}

Arrayimmutable所以你不能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);

与阿蒂什·辛皮相比

有助于解决问题:)(

最新更新