I tried to see when weak reference returns null by get():
String string = new String("abc");
WeakReference<String> wi = new WeakReference<>(string);
WeakReference<String> sr = new WeakReference<>(new String("another"));
System.out.println(wi.get());
System.out.println(sr.get());
System.gc();
System.out.println("After gc() wi = " + wi.get());
System.out.println("After gc() sr =: " + sr.get());
It prints:
abc
another
After gc() wi = abc
After gc() sr =: null
Why after gc(), wi still holds reference, and sr is holding null? I changed String type into Integer or my own class, same result.
What makes the core difference here?