要求指出下面这个程序的潜在问题,(此程序compile没问题, 一般操作没问题)import java.util.*;public class arrayStack {
  private Object[] elementArray;
  private int size = 0;
  public arrayStack(int capacity) {
   this.elementArray = new Object[capacity];
  }  public void push(Object e) {
   checkCapacity();
   elementArray[size++] = e;
  }  public Object pop() {
    if (size==0)
       throw new EmptyStackException();
    Object pop = elementArray[--size];
    return pop;
  }  private void checkCapacity() {
    if (elementArray.length == size) {
      Object[] tempArray = elementArray;
      elementArray = new Object[2 * elementArray.length + 1];
      System.arraycopy(tempArray, 0, elementArray, 0, size);
    }
  }
}

解决方案 »

  1.   

    答:潜在问题很严重: pop() 操作时,栈中已出栈的对象引用还在,会导致对象空间无法回收。
    故pop()中:
    Object pop = elementArray[--size]; 
    应改为:
    Object pop = elementArray[size]; 
    elementArray[size]=null;
    size--;
      

  2.   

      public Object pop() { 
        if (size==0) 
          throw new EmptyStackException(); 
        Object pop = elementArray[--size]; 
        elementArray[size]=null; 
        return pop;
      } 
      

  3.   

    Object pop = elementArray[size]; 
    除非=操作是拷贝复制,如果是引用的话不存在LS的问题
      

  4.   

    如果有频繁的push, pop操作的话, 这个应该不是很严重的问题吧答:潜在问题很严重: pop() 操作时,栈中已出栈的对象引用还在,会导致对象空间无法回收。
    故pop()中:
    Object pop = elementArray[--size];
    应改为:
    Object pop = elementArray[size];
    elementArray[size]=null;
    size--; 
      

  5.   

    push和pop没有考虑线程安全性,真的是非常严重的问题。
      

  6.   

        public synchronized Object pop() {
     Object  obj;
     int len = size;
     if (len == 0){
        throw new EmptyStackException();
             }
             obj= elementArray[len-1];
             removeElementAt(len - 1);//怎么写是你的事!
     return obj;//返回弹出元素
        }
      

  7.   

      public void push(Object e)  public Object pop()加synchronized