Henry Vest wrote:
> Følgende kode
> String s = new String("hej");
> WeakReference w = new WeakReference(s);
> s = null;
> System.out.println(w.get());
> System.gc();
> System.out.println(w.get());
> giver outputtet "hej" og "null" som forventet. Men erstatter jeg første
> linie med
> String s = "hej";
> får jeg outputtet "hej" og "hej". Nogen der kan forklare det? Har det
> noget at gøre med JVM's string pool?
Det er lidt relateret til intern() metoden på String. Alle strengkonstanter
"interneres", så ovenstående med "hej" i stedet for new String("hej")
svarer til:
String s = (new String("hej")).intern();
intern() lagrer så referencen i en tabel og nu kan den ikke
blive garbagecollect'et.
Ulrik Magnusson
--
What the world needs now is programs that WORK, not ones that don't
work, but don't work 5% faster.
Roedy Green
Visit my home page:
http://www.geocities.com/ulrikm