《effective java》item 6, 8

item6:尽量避免创建不需要的对象

  • 错误示范1

    //"test"本身就是一个对象,调用String的构造函数再生成一个
    // Stringd的对象s,没有什么意义
    String s = new String("test");
    
  • 错误示范2

    public static long sum() {
        Long sum = 0;
        for (long i=0; i<=Integer.MAX_VALUE;i++) {
      	  sum += i;
        }
    }
      //这里的sum是Long类型。与long类型的i相加,会自动变成
      //new Long(sum.longvalue+i)
    
    //警惕自动装箱。尽量使用原始数据类型
    
    但注意:这条item的目的不是说创建对象很耗时,不推荐创建新对象。相反,得益于JVM的性能优化,创建销毁对象的性能很好。若创建新对象更方便,更清晰,那就创建新对象,只是不要创建无谓的新对象。

    item8: 消灭无效引用

    对不再有效的对象,却仍有引用指向,将引用置为null


interface Stack {
    int getSize();
    boolean isEmpty();
    Object top();
    void push(Object e);
    Object pop();
}
class ArrayStack implements Stack {
    private final  int CAP = 16;  //初始容量
    private int capacity = 0; //当前容量, 也是插入元素的位置(即栈顶+1)
    private Object[] elements;

    public ArrayStack() {
        elements = new Object[CAP];
    }
    @Override
    public int getSize() {
        return capacity;
    }
    @Override
    public boolean isEmpty() {
        return capacity == 0;
    }
    @Override
    public Object top() {
        return elements[capacity-1];
    }
    @Override
    public void push(Object e) {
        ensureCapcity();
        elements[capacity++] = e;
    }
    @Override
    public Object pop() {
//        return elements[--capacity]; //保留了无效引用
        Object result = elements[--capacity];
        elements[capacity] = null; //把当前引用,即上一个栈顶元素引用置为null
        return result;
    }
    public void ensureCapcity() {
        if (elements.length == getSize()) {
            elements = Arrays.copyOf(elements, getSize()*2 +1);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值