Effective Java 学习笔记-1-创建与销毁对象

2020-11-25   160 次阅读


Effective Java 学习笔记-1-创建与销毁对象

避免创建不必要的对象

  • // eg
    // No!!!
    // 第一次执行,会分别在常量池和堆上新建对象,之后每次执行都会在堆上新建对象
    String str = new String("hello");
    // Yes!
    // 只有第一次执行在常量池上新建对象,之后直接复用
    String str = "hello";
    
  • 优先使用静态工厂方法,而不是构造器,以避免创建不必要的对象
  • 自动装箱使得基本数据类型和装箱数据类型之间的差别变得模糊,但是并没有完全消除。
    • // eg
      private static long sum() {
          Long sum = 0L;
          for (long i = 0; i <= Integer.MAX_VALUE; i++) {
              sum += 1;
          }
          return sum;
      }
      
    • 这个例子中,long 被错写成了 Long 导致每次循环都会新建一个 Long 对象,影响性能
    • 要优先使用基本数据类型,而不是装箱基本类型,避免无意识的自动装箱

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

Live in the future, then build what's missing.