Effective java 读书笔记

来源:互联网 发布:雅马哈合成器 知乎 编辑:程序博客网 时间:2024/06/07 05:08

1.清除过期对象引用,防止内存泄漏

例子:

    public Object pop() {        if (size == 0) {            throw new EmptyStackException();        }        Object result = elements[--size];        elements[size] = null;        return result;    }
一旦元素被释放,元素中包含的任何对象引用都要被清除。

常见内存泄漏:把引用放到缓存中,容易遗忘;监听器和回调,注册后没有取消。


2.equals和hashCode

hashCode返回一个数值型散列值,根据该值确定对象在散列表中存在的位置。所以相同的对象必须要有相同的hashCode。覆盖equals时,hashCode也需要覆盖。否则会出现这种情况。

    class Dog {        String name;        public Dog(String name) {            this.name = name;        }        @Override        public boolean equals(Object obj) {            if (obj == this) {                return true;            }            if (!(obj instanceof Dog)){                return false;            }            return  ((Dog) obj).name.equals(this.name);        }    }    @Test    public void test() {        Map<Dog, Object> map = new HashMap<>();        map.put(new Dog("aa"), "aa");        System.out.println(map.get(new Dog("aa"))); //null    }
覆盖了equals方法,两个dog实例是相等的,但是它们的散列值不同,所以第一个put的dog对象被放到了一个散列桶中,而第二个get的dog对象是在另一个散列桶中获取,自然为null






原创粉丝点击