Java开发之道
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

细节3 提高效率——缓存数据

在使用Java语言编程时,经常需要使用关系运算符“==”,来比较两个对象是否相等,如比较字符串、比较基本数据类型的包装类,等等,但是,由于对象的创建方式不同,往往会导致比较结果不同。

下面是使用构造方法创建对象的示例:

    String name1 = new String ("Good");         // 创建字符串对象,其初始内容为Good
    String name2 = new String ("Good");         // 创建字符串对象,其初始内容为Good
    System.out. println (name1 == name2);        // 输出比较结果

说明

本示例运行后,将在控制台输出假值false,说明所创建的两个对象name1与name2是不同的,这是由于当使用某个类的构造方法创建对象时,每创建一个对象就会在内存中为其分配一段新的内存地址,并将其存储在该段内存中,本示例创建的两个对象在内存中的分布如图5.6所示,由于不同内存地址空间中的两个对象是不同的,所以本示例输出了假值false。

图5.6 使用String类型的构造方法创建对象

下面是使用缓存数据创建对象的示例:

    String name1 = "Good";                        // 使用字符串常量Good创建字符串对象
    String name2 = "Good";                        // 使用字符串常量Good创建字符串对象
    System.out. println (name1 == name2);           // 输出比较结果

说明

本示例运行后,将在控制台输出真值true,说明所创建的两个对象name1与name2是相同的,这是由于字符串常量Good在内存中的地址已经确定,因此将同一个字符串常量赋值给两个不同的字符串变量时,相当于将字符串常量的引用赋值给字符串变量,因此,这两个字符串变量的值是完全相同的,因为它们指向同一个内存地址,本示例创建的两个对象在内存中的分布如图5.7所示,由于它们存储的是同一个字符串常量的引用,所以本示例输出了真值true。

图5.7 将字符串常量赋值给字符串变量创建对象

说明

当需要创建对象时,如果已经知道对象的常量值,可以通过将常量值赋值给变量的方式来创建对象,尤其是将同一个常量值赋值给多个变量时,相当于直接从内存中取出常量的值,这样程序的效率会更高,这种直接从内存中获取常量值来创建对象的方式所使用的常量值就是缓存数据。