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

时间:2015-02-10 14:39:18

标签: java android arrays

之间有什么区别
String [] O = {};

String[] Ox = new String[3000];

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

6 个答案:

答案 0 :(得分:4)

O为空数组且Ox长度为3000,要将Ox复制到O,您必须使用copyOf()的{​​{1}} api类。

Arrays

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
    }

Arrays类的copyOf()api的内部实现。

O array length : 3000

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方法java创建的新数组copyOf()和使用char[] copy方法将native数组的内容复制到original数组。

因此,在您的代码中,您不能直接将copy数组内容复制到Ox数组,因为您必须创建大小为3000的数组或使用Java的O api。

答案 1 :(得分:3)

在Java数组中,数组不可变,因此无法更改数组的大小。因为你隐式地将O声明为0({}表示它是空的)它无法填充。

您需要声明一个大小为3000的新数组(new String [3000]),然后使用

答案 2 :(得分:1)

O是一个空数组,因此您无法将任何内容复制到其中。

答案 3 :(得分:0)

使用以下语句声明一个空的表O(size = 0,没有元素)。

 String[] o = {};

如果你写了:

String[] o = {"this", "is", "a", "test"};

您已将表O初始化为size = 4并包含四个字符串元素“this”,“is”,“a”和“test”。

最后,如果您按以下方式初始化表格:

String[] o = new String[4];

您已声明您的数组的大小= 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);

答案 4 :(得分:0)

这里有一些不同之处:

1)String [] O = {};

这意味着使用String[]中包含的数据集创建一个名为O的新{} 已初始化。由于无数据,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];

在这种情况下,您创建了一个新的String[],其中包含3000"空格"或"指数"可用。这实际意味着您可以在此数组中维护对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,因此任何复制到此数组或从该数组复制的尝试都将导致异常。

答案 5 :(得分:0)

感谢所有人 - 为我带来一些新信息 - 但

O = Arrays.copyOf(Ox, Ox.length);

来自atish shimpi

有助于解决问题:))