//栈遵循后进先出
  
  public class Stack{
  
   //使用数组存储数据
   //栈可以存储多个引用类型元素
   //创建Object类型数组意味栈可以储存java语言中所有引用数据类型
   Object[] elements;
  
   //指向栈顶元素上方的一个帧
   int index; //默认值是null 在Stack中还没元素的时候就有一个帧指向stack.
  
   //规定栈默认的初始化容量是5
   //Constructor
   Stack(){
   this(5);
   //elements = new Object[5];这样写是this(5);的另一种写法
   }
  
   Stack(int max){
   elements = new Object[max]; //动态初始化 把max传进Object[max]里面
   }
  
   //栈应对外提供一个压栈的方法 压栈返回值是空
   public void push(Object element){ //因为它是Object类型数组只能往里面压object element
    /*
    elements[index] = elements; //给栈中元素赋值
    index++
    */
    //上面代码的连写 index++在后面意味着先赋值后加1 先是默认值0后加1
    elements[index++] = elements; 
   } 
  
   //栈应对外提供一个弹栈的方法 弹栈最终要弹出一个元素 类型是Object类型所以返回值是Object类型
   public Object pop(){  //pop方法没参数因为弹的时候一定是栈顶的元素往外弹
   /*
   index--; //方法栈帧自减1 帧在最上的元素还上一位,弹出一个数组就要减一位 
   return elements[index];
     */
     return elements[--index]; // 先自减1 index=4 index等于4这个位置没元素 减自减1 变成return elements[3]
   }
     }
public class Test{

public static void main(String[] args){

Stack s = new Stack(); //初始化容量为5

User u1 = new User("Jack",20);
User u2 = new User("SMITH",21);
User u3 = new User("FORD",22);
User u4 = new User("JAMES",24);
User u5 = new User("CURRY",26);

//压栈
s.push(u1);
s.push(u2);
s.push(u3);
s.push(u4); 
s.push(u5);

//弹栈  每弹一次s.pop()弹出一个Object 相当于System.out.println(Object);
//程序会调toString 下面已经将toString重写了
System.out.println(s.pop());
System.out.println(s.pop());
System.out.println(s.pop());
System.out.println(s.pop());
System.out.println(s.pop());
}
}class User{

String name;
int age;

User(String name,int age){
this.name = name;
this.age  = age;
}

//重写toString方法
public String toString(){
return "User[name="+name+",age="+age+"]";
}
}输出结果为什么是
[Ljava.lang.Object;@15db9742
[Ljava.lang.Object;@15db9742
[Ljava.lang.Object;@15db9742
[Ljava.lang.Object;@15db9742
[Ljava.lang.Object;@15db9742我已经重写toString方法了

解决方案 »

  1.   

    因为pop方法返回的是object类型,而不是user
      

  2.   

    能给个完整的Stack代码吗 看一下pop方法的返回类型,前面那个说Object的不准确吧,多态会避免这个错误的
      

  3.   

    我觉得你好像输出了一个Object[]
    Object[]
    才是[Ljava.lang.Object;
    Object
    是java.lang.Object;
      

  4.   

    写那么多注解。。还赋值赋错了。。是elements[index++] = element; 不是elements[index++] = elements;
      

  5.   

    elements[index++] = element;