Effective java 读书笔记

xiaoxiao2021-02-28  95

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

转载请注明原文地址: https://www.6miu.com/read-32181.html

最新回复(0)