给数组扩容失败求解答

每次输出数组的长度都是5,并且模拟压栈的时候到5就提示满了,为什么扩容不成功呢,来大佬看看,
  
/**
 * @author liqiming
 * @date 2021-5-9 -16:04
 *
 *
 *
 *
 * 模拟栈的压栈和弹栈
 */
public class MyStock {
    public MyStock(int c){
        myStock=new Object[c];

    }
    public MyStock(){}
    int n=-1;//用n作为栈的指向元素,压栈和出栈都用数组表示,这里
    //陈述的是一个栈可以存储所有的引用类型的数据,我们定义为Object元素
    Object [] myStock;
    static{

    }



    //压栈方法;
    public void push(Object object){

        if(n>=myStock.length-1){
            System.out.println("栈满了,压个鸡鸡,赶紧加空间吧");

            return;
        }
        else{
            System.out.println("压栈成功");
            n++;
            myStock[n]=object;

        }

    }
    //弹栈方法
    public void pop(){
        if(n==-1){
            System.out.println("栈已经空,请压栈继续");
            return;
        }
        System.out.println("接下来开始弹栈");
        System.out.println(myStock[n]);
        n--;


    }
    //提供一个方法输出这个栈的长度
    public  void printArrayLength(){
        System.out.println("栈的长度是: "+myStock.length);
    }


//提供一个给栈扩容的方法
public void arrayExtend(Object[] obj){
    Object [] objects1 =new Object[obj.length+10];
    System.arraycopy(obj,0,objects1,0,obj.length);
    obj=objects1;
    System.out.println("传入参数的地址"+objects1);

    System.out.println("改变之后的地址"+obj);


    System.out.println("新栈的长度是:"+obj.length);

}

        }

class Test3{
    public static void main(String[] args){

        //这里模拟压栈
        MyStock stock1 =new MyStock(5);//这里的构造方法给栈赋予初始长度就是5
        System.out.println("输出原始数组的地址"+stock1.myStock);
        stock1.arrayExtend(stock1.myStock);


       /* stock1.push(new Test3());//CTRL+d 向下复制,持续压栈
        stock1.push(new Test3());//CTRL+d 向下复制,持续压栈
        stock1.push(new Test3());//CTRL+d 向下复制,持续压栈
        stock1.push(new Test3());//CTRL+d 向下复制,持续压栈
        stock1.push(new Test3());//CTRL+d 向下复制,持续压栈
        stock1.push(new Test3());//CTRL+d 向下复制,持续压栈 这里会提示栈满了
        //接下来给栈扩容

        stock1.arrayExtend(stock1.myStock);
        stock1.printArrayLength();//输出数组的长度
        stock1.pop();//弹栈
        stock1.pop();//弹栈
        stock1.pop();//弹栈
        stock1.pop();//弹栈
        stock1.pop();//弹栈
        stock1.pop();//弹栈--弹栈失败
        stock1.pop();//弹栈--弹栈失败*/







    }

}


    }

}

Java 是值传递的,不是引用传递(类似 C 语言中的指针)。传递进来的是一个 "新"的数组了,不会影响到主调函数中的数组。所以你只能改成 myStock = objects1;。

Object [] objects1 =new Object[obj.length+10];

 

System.arraycopy(obj,0,objects1,0,obj.length);

 

obj=objects1;

改为

myStock= objects1;

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y