Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有人能解释一下这个数组的长度吗?_Java_Arrays_Size - Fatal编程技术网

Java 有人能解释一下这个数组的长度吗?

Java 有人能解释一下这个数组的长度吗?,java,arrays,size,Java,Arrays,Size,我们只能在java数组中存储固定的元素集。 但是我声明数组的大小为1,然后尝试存储四个元素。我可以看到大小增加到4。为什么?我们只能在数组中存储固定大小的元素。它不会长大。那为什么我的尺码是四而不是一 String inputList ="I dont understand this"; String[] temp = new String[1]; temp = inputList.split(" "); System.out.println

我们只能在java数组中存储固定的元素集。 但是我声明数组的大小为1,然后尝试存储四个元素。我可以看到大小增加到4。为什么?我们只能在数组中存储固定大小的元素。它不会长大。那为什么我的尺码是四而不是一

    String  inputList ="I dont understand this";
    String[]    temp = new String[1];       
    temp = inputList.split(" ");
    System.out.println(temp.length);
在这里,您创建了一个由1个元素组成的数组,并将其分配给
temp
变量

String[] temp = new String[1];
在这里,您为
temp
变量分配了一个不同的数组,该数组由
inputList.split(“”
)创建并返回,它可以具有不同数量的元素(在您的示例中为4个)


第二次赋值没有改变原来的1元素数组。但是,在第二次赋值之后,没有变量引用原始数组,因此您无法再访问它,并且可以对其进行垃圾收集。

因为您正在重新设置“temp”变量,所以现在它是inputList.split(“”)

因为赋值不是永远“固定”变量

变量只包含对某个对象的引用,在您的例子中是对数组的引用

首先,变量引用一个包含一个元素的数组。然后更改该值,使同一变量现在引用另一个数组(由
split()
创建)

如果您想防止这种情况发生,您可以使用

temp = inputList.split(" ");

现在,当您尝试为该变量重新赋值时,编译器会给出一个错误

原因很简单

String[] temp = new String[1];
final String[] temp = new String[1];  

temp这里只是一个参考变量,它以前指向一个只有一个元素的数组。但是当执行第三行代码时,temp开始指向由split函数返回的新字符串数组

不,您没有将数组声明为大小为1的数组。您只是将引用
temp
分配给一个大小为1的数组。然后将一个引用分配给大小为4的数组。您的原始数组从未更改,只是被垃圾收集。@pvg我更喜欢“符合垃圾收集条件”表达式,因为不能保证旧数组确实被垃圾收集。@Mena确定。也不能保证太阳会升起,但这是一个合理的可能性,也是一个合理的非正式捷径来假装太阳会升起。@pvg不想听起来很迂腐,只是准确:)@mena这是一个完全合理的观点,尽管从现在起我很想说“阵列被带到北部的一个农场”。