给你个简单的例子 Reference<Integer> r = new WeakReference<Integer>(new Integer(1)); System.out.println(r); System.out.println(r.get()); System.gc(); System.out.println(r); System.out.println(r.get()); 第二次输出的时候r.get()已经变成了null WeakReference管理的对象在没有任何强引用指向的情况下在gc时会被回收 但需要注意的是如果有强引用指向 就不会 假设把上面的例子第一句改成 Integer i = new Integer(1); Reference<Integer> r = new WeakReference<Integer>(i); 那么不论如何gc r.get()都会一直正确返回 因为i是个强引用