用Java实现的背包集合为何在foreach循环报错?

错误信息:Type mismatch: cannot convert from element type Object to int
(但是我的迭代器返回的应该不是Object型)

源代码:
Bag类:
package cn.dbj.oop.Bag;

import java.util.Iterator;

public class Bag implements Iterable {
private item[] a;
private int capacity = 0;
private int max ;
public Bag (int size) {
a = (item[]) new Object[size];
max = size;
}

public item[] getA() {
    return a;
}

public Boolean isEmpty (){
    if(capacity == 0)
        return true;
    else return false;
}

public void add (item e) {
    if(capacity == max-1){
        System.out.println("The bag is FULL!");
        return;
    }
    a[capacity++] = e;
}

public void delete() {
    if(capacity == 0){
        System.out.println("The bag is EMPTY!");
        return;
    }
    a[capacity--] = null;
}

public int getCapacity() {
    return capacity;
}

public Iterator<item> iterator() {
    // TODO Auto-generated method stub
    return new ReverseBagArray();
}

public class ReverseBagArray implements Iterator<item> {

    int size = capacity;
    @Override
    public boolean hasNext() {
        // TODO Auto-generated method stub
        return size == 0 ;
    }

    @Override
    public item next() {
        // TODO Auto-generated method stub
        return a[size];
    }

    @Override
    public void remove() {
        // TODO Auto-generated method stub

    }

}

}

Test类:
package cn.dbj.oop.Bag;

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

    Bag<Integer> intbag = new Bag<Integer>(10);
    intbag.add(2);
    intbag.add(45);
    intbag.add(3);
    System.out.println(intbag.isEmpty());
    for(int i : intbag){
        System.out.print("This is:");
        System.out.println(i);
    }
    System.out.println("!!!");
}

另:如果我在foreach中用Object i,再强制转型成int,则测试结果是根本没有进入循环,这是为什么呢?

  for(Integer i : intbag)

把 int 换成 Integer 我之前也试过了,还是不行呀。。而且java应该是自动拆装箱的吧?