本文執行個體分析了Android仿String的對象駐留。分享給大家供大家參考,具體如下:
String a = "abc";
String b = "abc";
a == b true;
變數a和變數b是同一個值。這不只是說它倆的值是一樣的,而是說就是同一個字串對象。用Java的話來說就是a==b的結果是true。然而這個只對字串以及小的整型或者長整型有效。其它的對象是不會被駐留的,也就是說如果你建立了兩個對象而他們的值是相等的,但他們並不是同一個對象。這個問題有時候很討厭,尤其是當你從某個持久化儲存中取出一個對象時。如果同一個對象你取了兩次,你當然希望最終取出的是同一個對象,不過實際上你取出的是兩份拷貝。換句話說你其實希望的是取出的是儲存中那個對象在記憶體裡面的同一個拷貝。有些儲存層是會做這樣的處理的。比如說JPA的實現就是遵循這個模式的,而別的情況可能你就得自己去做緩衝了。
如何讓自己的對象,也好似上面string一樣呢;使用下面這個類吧
import java.lang.ref.WeakReference;import java.util.WeakHashMap;class WeakPool<T> { private final WeakHashMap<T, WeakReference<T>> pool = new WeakHashMap<T, WeakReference<T>>(); public T get(T object) { final T res; WeakReference<T> ref = pool.get(object); if (ref != null) { res = ref.get(); } else { res = null; } return res; } public void put(T object) { pool.put(object, new WeakReference<T>(object)); }}
希望本文所述對大家Android程式設計有所協助。