我认为一旦定义了大小,就无法更改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)
答案 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。