可以在JAVA中更改String数组的长度吗?

时间:2017-04-19 11:52:21

标签: java arrays string memory-management

我认为一旦定义了大小,就无法更改String数组的长度。 但我不确定为什么它允许我在这里更改它(对于这段代码)?

public class Test1 {

    public static void main(String[] args) {

        //size =3
        String[] roleNameArray = { "a", "b", "c" }; 

        // I also tried with 
          //String[] roleNameArray = new String[3];
          //roleNameArray[0]="a";
          //roleNameArray[1]="b";
          //roleNameArray[2]="c";

        System.out.println(roleNameArray.length);

        roleNameArray = addMoreValues();

        // size changed to 4
        System.out.println(roleNameArray.length);
    }

    public static String[] addMoreValues() {
        final String[] roleNameArra = new String[4];
        roleNameArra[0] = "a";
        roleNameArra[1] = "b";
        roleNameArra[2] = "c";
        roleNameArra[3] = "d";
        return roleNameArra;
    }

}
  

输出: - 3 4

当我们初始化数组“roleNameArray”时,size = 3 然后大小变为4,“roleNameArra”等同于“roleNameArray”。

问题: -

  • 在这种情况下,String数组的大小是否已更改?

  • 如果不是JAVA的内存会发生什么? (java的 版本使用1.8)

4 个答案:

答案 0 :(得分:0)

那是因为您创建了新数组实例

final String[] roleNameArra = new String[4];

然后你将旧数组的引用更改为新数组(从函数返回)。

答案 1 :(得分:0)

在方法addMoreValues中,您正在创建一个新数组,该数组与旧数组无关。只是因为您使用对新数组的引用填充名为roleNameArray的变量,您才会看到更新的长度。如果你只是在没有更新局部变量的情况下调用addMoreValues(所以没有roleNameArray =),将使用旧的未更改的数组。

答案 2 :(得分:0)

也许这个?

final String[] roleNameArra = new String[4];

您没有更改其大小,而是将其分配给新的大小。

我建议您阅读有关java集合的更多信息。

答案 3 :(得分:0)

您没有更改roleNameArray的长度。在您的方法中,您创建了大小为4的新数组,然后返回对它的引用。

所以现在在roleNameArray中你有来自你方法的数组,而不是来自main。