java中的数组能够在定以后改变长度吗

Python013

java中的数组能够在定以后改变长度吗,第1张

不可以。

因为Java中的数组长度是不可变的,数组对象的length属性是常量。当然这并不意味着没有解决办法。如果你的确需要数组的容量不断变化,那最好使用ArrayList。如果数组的长度的调整并不频繁,只是偶尔需求,可以使用Arrays.copyOf来“调整数组的长度”,这里的调整长度并不和我开始的回答“数组长度是不可变的”冲突,因为这个方法是new一个更大的数组,把旧数组元素拷贝进去,然会返回给你的。

源代码:(byte数组版本)

public static byte[] copyOf(byte[] original, int newLength) {

        byte[] copy = new byte[newLength]

        System.arraycopy(original, 0, copy, 0,

                         Math.min(original.length, newLength))

        return copy

    }

java中的数组是不可变的,所以要实现可变数组是不可能的了。如果非要改变数组的长度,那么也只能重新开辟一个新的数组然后将长度设定为想要的,然后放弃原来的数组,当然这个放弃的数组,如果没有被引用,它会很快就被GC掉。

java中有一个方法:System.arraycopy

通常我们都使用的是Arrays.copyOf,但你去看API就知道,其实Arrays.copyOf调用的也正是System.arraycopy

public static int[] copyOf(int[] original, int newLength) {

        int[] copy = new int[newLength]

        System.arraycopy(original, 0, copy, 0,

                         Math.min(original.length, newLength))

        return copy

    }

java中的数组一旦被定义长度是不允许修改长度的,如果题主希望实现类似的功能可以采用ArrayList。ArrayList的底层结构就是数组。当ArrayList实例化时会默认设置一个长度,当长度不够用时会自动扩展现有长度的1/2.(假设初始数组长度为10,现在变成了15)

System.arraycopy(Object src,int srcPos,Object dest,int destPos,int length )能够实现数组复制的功能。

假设有数组a(src),数组b(dest),我们希望把a数组中从下标为2(srcPos)长度为3(length)的元素复制到b的下标为4(destPos)开始的元素中。java代码示例如下:

int a = [1,3,5,7,9]

int b = [2,4,6,8,0,2,4]

System.arraycopy(a,2,b,4,3)

//最终b的内容为[2,4,6,8,5,7,9]

但是如果注意API的话会发现arraycopy有几个限制

1、a,b的元素类型必须相同(int和Integer这里也是需要区分的)

2、数组不能越界,也就是srcPos+length不能超过a的长度;desPos+length也不能超过b的长度,否则就会报数组越界的一场。这也说明了无法实现数组长度的动态扩展。