• 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));
        }
    }
  • 相关阅读:
    MyBatis 框架系列之基础初识
    从零开始实现在线直播
    面试中关于Redis的问题看这篇就够了
    Spring Boot 中使用 MyBatis 整合 Druid 多数据源
    MyBatis的foreach语句详解
    小结:“服务器端跳转”和“客户端跳转”的区别
    Centos7.3安装vsftp服务
    Spring 注解@Value详解
    Spring中@Bean与@Configuration
    数据结构之LinkList
  • 原文地址:https://www.cnblogs.com/lee0oo0/p/3606489.html
Copyright © 2020-2023  润新知