Java 重新定义变量后数组的大小是多少?
在Java中,我将一个长度为N的现有数组分配给一个名为st的变量。如果我创建一个大小为N+k的相同类型的新数组,则称为newSt。newSt=st的结果是什么? newSt将包含st和空格的内容,还是将其长度减少到st的长度Java 重新定义变量后数组的大小是多少?,java,arrays,variables,Java,Arrays,Variables,在Java中,我将一个长度为N的现有数组分配给一个名为st的变量。如果我创建一个大小为N+k的相同类型的新数组,则称为newSt。newSt=st的结果是什么? newSt将包含st和空格的内容,还是将其长度减少到st的长度 Object[] st = new Object[20]; // st is filled Object[] newSt = new Object[40]; newSt = st; 长度将是20 您也可以自己测试它: Object[] st = new Object
Object[] st = new Object[20];
// st is filled
Object[] newSt = new Object[40];
newSt = st;
长度将是20 您也可以自己测试它:
Object[] st = new Object[20];
System.out.println("st: " + st.length);
Object[] newSt = new Object[40];
newSt = st; // newSt was Object[40], st is Object[20] => newSt is now Object[20].
System.out.println("newSt: " + newSt.length);
我认为你很困惑,因为你试图把这看作是一个结构性的分配,但它是一个参考名称 当
secondArray=firstArray
使变量secondArray
引用firstArry
时,两个名称不同的变量引用内存中的同一对象。先前对secondArray
的初始化丢失
因此newSt
和所有对象的大小与st
的大小相同,因为newSt
是st
,但有另一个名称
您的想法类似于一个构造函数,它使用另一个数组和大小作为参数。在Java中,变量名称保留实际数组的引用。因此
st=new Object[20]
创建一个大小为20的数组,并将引用分配给st
,以及newSt=new Object[40]
创建一个大小为40的数组,并将引用分配给newSt
因此,当我们设置st=newSt
时,我们只是将数组的引用赋值给st
,它正被newSt
引用。现在我们可以使用st
访问第二个数组的所有值
它不会对数组进行任何类型的合并、并集或交集。您自己是否尝试过检查?