《Effective Java》第5条: 避免创造不必要的对象

一:String对象举例

//这是一个极其错误的做法,浪费系统资源
String s = new String("stringette");

    以上的做法属于极端的反例,在上述代码被频繁调用时,每次执行都会调用new String("stringette"),创建一个新的实例,浪费资源

String s = "stringette";

    这是一个改进的例子,多次执行这一句代码也只存在一个实例.

    有一个经典的问题:下面两种方式的String初始化,分别创建了几个对象?

//第一种方式
String a = new String("CSDN");
String b = new String("CSDN");

//第二种方式
String m = "CSDN";
String n = "CSDN";

      在我的理解中:在第一种方式两条语句new String()都分别创建了一个对象,而"CSDN"创建了3个. 第二种方式则只创建了"CDSN"一个对象.这是为什么呢?

        在JAVA虚拟机(JVM)中存在一个常量池,当常量池中已经查找到"CSDN"存在时,就会直接返回对象而不会重新创建,这个判断是通过"=="判断的,而new String()通过"=="判断是"false"的,要重新创建对象的.

二:重用已知的不会被修改的可变对象

         这一部分我的理解就是,当写完解决方案后,要注意思考是否有优化方式,有一些不会改变的对象是不是可以创建成static的形式,以减少性能的损耗.

三:在非必要的情况下,要优先使用基本类型,而不是装箱基本类型

         装箱类型是通过一个类包了基本类型,装箱类型的创建消耗要比基本类型高一些.

         在与数据库连接时需要使用装箱类型,因为当一个值为空时,不能够给数据库传一个默认值,这是错误的.

猜你喜欢

转载自blog.csdn.net/qq_34332035/article/details/81702648