java对象数组只能在所定义的类方法扩容,却不能被其他类方法来扩容,请问为何?
package expermenent;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Test test = new Test();//新建主类,为了引进主类中有一个方法
CapacityAndLength cl = new CapacityAndLength();//新建对象
Scanner scanner = new Scanner(System.in);//新建对象
cl.length=0;cl.capacity=3;//对象初始化
AAA[] a = new AAA[3];//新建对象数组
for(int i=0;i< a.length;i++){//对象数组初始化
a[i]=new AAA(0);
}
String choose;//选择是否继续扩容的变量
while(true){
test.expend(a,cl);//判断容量是否充足的方法,如果不足,则扩容
System.out.println("a.lenth="+a.length+" cl.length="+cl.length+" cl.capacity="+cl.capacity);
a[cl.length].setA(1);//给变量赋值
cl.length=cl.length+1;//长度要变化
choose=scanner.next();//输入选择
if(choose.equals("n")){
break;
}
}
//打印出来
for(int i=0;i< cl.length;i++){
System.out.println(a[i].getA());
}
}
public void expend(AAA[] a,CapacityAndLength cl){
if(cl.length==cl.capacity) {
System.out.println("正在扩容...");
AAA[] newa = new AAA[cl.capacity * 2];
for (int i = 0; i < newa.length; i++) {
newa[i]=new AAA(0);//对象数组初始化
}
for (int i = 0; i < a.length; i++) {
newa[i] = a[i];//对象数组拷贝
}
a=newa;//指向内存地址改变
cl.capacity=cl.capacity*2;
System.out.println("扩容成功!");
System.out.println("a.lenth="+a.length+" cl.length="+cl.length+" cl.capacity="+cl.capacity);
}
}
}
class AAA{
private int a;
public AAA(int a) {
this.a = a;
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
}
class CapacityAndLength{
public int capacity;//数组容量,等效于a.length
public int length;//数组已初始化的个数
}
据我所了解,数组名等效于一个指针,
且我已执行a=newa;//指向内存地址改变
结果如图: