I'm trying to understand weak references and I saw the following code in wiki:
import java.lang.ref.WeakReference;
public class ReferenceTest {
    public static void main(String[] args) throws InterruptedException {
            WeakReference r = new WeakReference(new String("I'm here"));
            WeakReference sr = new WeakReference("I'm here");
            System.out.println("before gc: r=" + r.get() + ", static=" + sr.get());
            System.gc();
            Thread.sleep(100);
            // only r.get() becomes null
            System.out.println("after gc: r=" + r.get() + ", static=" + sr.get());
    }
}
Could someone please tell me why only r becomes null even though it's holding a strong reference (new string)?
 
     
     
    